Content-Type: multipart/related; start=; boundary=----------1TWFBtPx3ZKu3wM2BbUMhk Content-Location: http://www.bluedvdmovies.com/html.php?Html_showFile=page_2257&app_state=cda2c84158cb9a00&nats= Subject: =?utf-8?Q?Blue=20DVD=20Movies=20|=20Bonus=20Sites?= MIME-Version: 1.0 ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=html.htm Content-Type: text/html; charset=UTF-8; name=html.htm Content-ID: Content-Location: http://www.bluedvdmovies.com/html.php?Html_showFile=page_2257&app_state=cda2c84158cb9a00&nats= Content-Transfer-Encoding: 8bit Blue DVD Movies | Bonus Sites
Home » Bonus Sites Report a Problem

18 U.S.C. 2257 Compliance Notice

All models, actors, actresses and other persons that appear in any visual portrayal of actual sexually explicit conduct appearing or otherwise contained in this Website (videosz.com) were over the age of eighteen years at the time the visual image was created.

All other visual depictions displayed on this Website are exempt from the provision of 18 U.S.C. section 2257 and 28 C.F.R. 75 because said they do not portray conduct as specifically listed in 18 U.S.C section 2256 (2) (A) through (D), but are merely depictions of non-sexually explicit nudity, or are depictions of simulated sexual conduct, or are otherwise exempt because the visual depictions were created prior to July 3, 1995.

With respect to all visual depictions displayed on this web site, whether of actual sexually explicit conduct, simulated sexual conduct or otherwise, all persons were at least 18 years of age when said visual depictions were created.

The owners and operators of this Web site are not the primary producers (as that term is defined in 18 U.S.C. Section 2257) of any of the visual content contained in the Website.

Studio:

3 Vision

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: A. Smith 3166 E. Palmdale Blvd.,Palmdale CA 93550

Studio:

acid rain

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
M. Weston 21414 Chase st. Unit 1 Canoga Park, CA 91304

Studio:

Acid Rain - Platinum Collection

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
M. Weston, 8735 Shirley Ave Northridge, CA 91324

Studio:

Acid Rain - Super Shots

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: M. Weston 8735 Shirley Ave., Northridge CA 91324

Studio:

adam & eve

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
P. Harvey, 302 Meadowland Dr. Hillsborough, NC 27278

Studio:

Adrenaline Rush

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: G. Szabo 6031 Kester Ave., Van Nuys, CA 91411

Studio:

Altomar Video

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: R. Duak 7800 Airportbusiness Pkwy.,Van Nuys CA 91496

Studio:

Anarchy Films

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
K. Jacoby at Anarchy Films 20850 Dearborn St. Chatsworth CA 91311

Studio:

baby doll

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
K. Beechum 9158 Eton Ave. Chatsworth, CA 91311

Studio:

Bacchus

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: M. Chalfin 9718 GlenOaks Blvd. Unit B, Sun Valley CA 91352

Studio:

Bizarre Video Production/Powered By Holiday Pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
11151 VanOwen Ave. N.Hollywood Ca, 91605

Studio:

Black Mirror Studio

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: J. Gallant 676-A Ninth Ave. #329 NYC NY 10036

Studio:

Black City Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records:K. Innis 36-08 34th St., Studio #1, LIC NY 11106

Studio:

Black Label

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Documentation is maintained by Jay Michaels. 8335 Winnetka Avenue, Suite 122, Winnetka, CA. 91306

Studio:

Bob's T Girl Studio

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
BTG, Custodian of Records: 19360 Rinaldi St. Suite 429 Northridge, CA 91326

Studio:

Bordellonoir Studio

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: C. Lodge 8235 Santa Monica Blvd., Suite 301A W. Hollywood, CA 90069

Studio:

Bricate Entertainment

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: Jon Ray 13029 A Victory Blvd #334, North Hollywod CA, 91606

Studio:

Brookland Bros.

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: S. Brookland 317 SW Alder #200 Portland, OR 97204

Studio:

caballero

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
G. Poole Custodian of Records, 15041 Calvert St. Van Nuys, CA 91411

Studio:

Camel Toe

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: D.W. 9531 Cozycroft Ave., Chatsworth, CA 91311

Studio:

Captain Willy

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: J. Micheals 21418 Partenia St.Canoga Park, CA 91304

Studio:

Chameleon Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Dick Goldman 4041 W. Missouri Ave. Phoenix, Az 85019

Studio:

coast 2 coast

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
M. Rothstein Coast to Coast 39 W. 19th st. N.Y, NY 10011

Studio:

Colossal Entertainment

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: S. Baer, 5362 Cahuenga Blvd., North Hollywood, CA 91601

Studio:

Daddy Ohhh Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: Dr. Richard Wagner, PH.D., 1523 Cherrylane Place, Seattle WA, 98144

Studio:

Damaged Pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: S. Zingerman 21817 Plummer St. Suite C Chatworth, CA 91311

Studio:

Dane Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
D. Kone 9547 Cozycroft Ave. Chatsworth CA 91311

Studio:

DawgHouse Videos

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
1356 Atwood Ave Johnston Ri 02919-4904 USA

Studio:

Daydream Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: D. Mech, 1851 Topopock St., Glendale, CA 91204

Studio:

Decadence Pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: J.R. White, 9539 Cozycroft Ave., Chatsworth CA 91311

Studio:

demolition

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
M. Weston 21414 Chase St. #1 Canoga Park, CA 91304

Studio:

devil's films

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Micheal Rubinstien PMB 22425 Ventura Blvd., #110, Woodland Hills, CA 91364

Studio:

Dexter Palmer Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: M. Lopinto 3930 Louisiana St #9, San Diego, CA 92104

Studio:

Dirty Diva Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: E. Robinson, 127 Hendy Creek RD, Unit B, Pine City NY, 14871

Studio:

don goo

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Jeff Krull 9744 CozyCroft Ave. Chatsworth, CA. 91311

Studio:

DNA

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
2257 info, Custodian of records D. Desantis, 62 West 37th st. New York, NY 10016

Studio:

dreamland

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Dreamland Video 9158 Eton Ave. Chatsworth, CA 91311

Studio:

elegant angel

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Mr. Patrick Collins 9801 Variel St., Chatsworth, CA 913111

Studio:

Encore Video

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Greg Marsh 2130 First Ave. Suite # 910 NY, NY 10029

Studio:

Eros Media

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: R. Gibson, 630 Quintana Road, Morro Bay, CA 93442

Studio:

fat dog

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Larry Field 8975 FullBright Ave, Chatsworth CA. 91311

Studio:

Feline Films

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: B. Cohen, 9145 Owensmouth Ave., Chatsworth, CA 91311

Studio:

Filthy Franks/K-Tell

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
M. Koplik, 4913 N. Ashland Ave. #3 Chicago, IL 60640

Studio:

flashpoint

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
J Cumming 9960 Canoga Ave, Suite D-6 Chatsworth Ca. 91311

Studio:

forbidden

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
P. Busey 9547 Cozycroft Ave. Chatsworth, CA, 91311

Studio:

future works

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
J. Resnick 10 East 33rd St. New York, NY 10016

Studio:

Just Fine Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: John Fantasy, 400 E. Old Plank Rd., Columbia, MO 65203

Studio:

Gentlemen's Video

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Michael Esposito, Custodian of Records 21638 Lassen Street, Chatsworth, CA 91389

Studio:

Global Media

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records, D. Kolmar, Global Media Int'l Films Inc.630 9th Avenue, New York, NY. 10036

Studio:

Gourmet Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
This Gourmet presentation was produced before July 3, 1995 and therefore exempt.

Studio:

Grey Rose Production

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
C. Meister, Custodian of Records 2545 A Street # 17 San Diego, CA 92102

Studio:

Grind House

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: M. Weston, 8735 Shirley Avenue, Northridge, CA 91324

Studio:

heatwave

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Gabor Szabo 7650 Gloria Avenue Van Nuys, CA 91406

Studio:

Hell's Ground/K-Tell

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
2150 Ward St. St Laurent QC H4m 1T7

Studio:

Hell House Video

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Tyler Goty, Custodian of Records 3611 SW 112th St., Seatle, WA 98146

Studio:

High Def Home Entertainment

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: T. Funk, 3225 Mcleod Dr., Suite 100, Las Vegas, NV 89121

Studio:

hollywood

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Bambi Hall 12420 Montague St. Unit D Arleta, CA, 91331

Studio:

Horizon DVD

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: G. Szabo 6031 Kester Ave., Van Nuys, CA 91411

Studio:

in-excess

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Mr. Alex Katz In-X-Cess Productions, Inc. 9400 Lurline Ave. Unit F, Chatsworth,CA 91311

Studio:

IN-X-CESS - HP

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: M. Johnson at J.O.C. Studio 590 Calle Palo Fierro #4 Palm Spring, CA 92264

Studio:

Jet Multimedia

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
J Simpson 9811 Owensmouth Ave. Chatsworth CA 91335

Studio:

jill kelly productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
B. Friedland 9127 Thrasher Ave. Los Angelas, CA 90069

Studio:

Joy Ride Entertainment

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: V. Mills, 2600 W. Olive. Ste 564., Burbank, CA 91505

Studio:

K Tell - French Speaking Titles

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Shot In Europe, not required

Studio:

Lucky Devil

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: J. Simpson 9539 Cozycroft Ave., Chatsworth CA 91311

Studio:

Kandi Peach Production

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: Norman Sinclair, 3682 Spring St., Chamblee, GA 30341

Studio:

LBO Entertainment

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Robert Genova 21601 Devonshire St. Suite 125 Chatsworth,CA 91311

Studio:

legend

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
B. Mendleson & J. Richman 8955 Fullbright Ave. Chatsworth, CA 91311

Studio:

Legends/Powered by Holiday Pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
J. Richman & B. Mendelson, 9145 Owensmouth Ave., Chatsworth CA, 91311

Studio:

Lex Drill/Powered By Holiday Pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
J. Tenebaum, at Lex Drill, 9145 Owensmouth Avenue Chatsworth, Ca 91311

Studio:

Lick Pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: J.R. White, 9539 Cozycroft Ave., Chatsworth CA 91311

Studio:

Lord Perious

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
J. McKone, Custodian of Records: 3780 N. Wike Rd., Rolling Meadows, IL 60008

Studio:

Lust World Entertainment

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: D. Monroe, 415 N. El Molino Ave., Pasadena CA 91101

Studio:

Manhandle Media

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
1356 Atwood Ave. Johnston RI 02919-4904 USA

Studio:

Macho Man/Powered By Holiday Pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
A. Galdamez, 21817 Plummer Street #C Chatsworth,Ca 91311

Studio:

Mantropolis Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Records are in custody of M. Green, custodian of records. 7837 Noble Avenue, Van Nuys, CA. 91405

Studio:

Max Entertainment

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: Rick Juarez, 8426 Norris Ave, Los Angeles CA., 91352

Studio:

mayhem

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
M Snyder 9155 Deering Ave Chatsworth, CA 91311

Studio:

Meltdown

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
2257 info, C ustodian of records D. Desantis, 62 West 37th st. New York, NY 10016

Studio:

MMG Anime

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Not Needed

Studio:

Nasty Boyz Studio

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: D. Bonneville, 3885-J Cochran St. #328, Simi Valley, CA 93063

Studio:

Nasty Jack

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: J. Simpson, 9539 Cozycroft Ave, Chatsworth, CA 91311

Studio:

Ninn Worx - Supercore

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: J. Lane, 9730 Variel Ave., Chatsworth CA 91311

Studio:

nj films

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
J. Knowles 9800 D Topanga Cyn Blvd #602 Chatsworth CA 91311

Studio:

Notorious

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: J. Lane, 9730 Variel Ave., Chatsworth CA 91311

Studio:

Noose Video Productions/Powered By Holiday Pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Richard Garcia Jr. 500 Mill Road Bensalem, Pa 19020

Studio:

Old Pueblo

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Arnold Stein Old Pueblo Distribution 3938 E Grant Rd Suite # 257 Tucson, AZ 85712

Studio:

OSK Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: M. Stever, 889 Exmouth St. Unit 9, Sarnia, Ontario, Canada

Studio:

Outrageous

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
2257 info D. Moshko custodian of records, 255 West 36th Street #204 New York, NY 10018

Studio:

Pacific Sun Entertainment

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
19425 Londelius St. Northridge, Ca 91324

Studio:

Pandemonium

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
2257 info J. Resnick, Custodian of Records: 105-111 S. State Street, Hackensack, NJ 07601

Studio:

Pig Daddy

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
4001 South Decatur Blvd. Unit 37-459 Las Vegas, Nev 89103

Studio:

Pink Pineapple

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Exempt

Studio:

Planet Skin/K-Tell

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
J. Krull 9724 Cozycroft Ave. Chatsworth, Ca 91311

Studio:

Puppy Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: Keith Bastron, 4726 Kansas Street., San Diego CA 92116

Studio:

Powerhouse

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
B. Rinaldi, Custodian of Records 21418 Panthenia St. Canoga Park, CA 91304

Studio:

Powersville

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Proof of Age is on file with J. Lane, 9730 Variel Ave., Chatsworth, CA 91311

Studio:

Purple Haze Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
2257 info, Custodian of records at the office of the manufacturer, 255 W36th st, NY, NY 10018

Studio:

Pure Platinum Video

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: Emily Rigby 7880 W. 20Th Ave, Studio 41 Hialeah, FL 33016

Studio:

Pure Filth Productions/Powered By Holiday Pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
R.Spallone At S.W Services 9145 Owensmouth Ave. Chatsworth Ca.91311

Studio:

Pink Visual Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
14141 Covelle St. Building #6 Suite A/B VanNuys,Ca. 91405

Studio:

puritan

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
J. Richman & B. Mendleson 8955 Fullbright Ave. Chatsworth, CA 91311

Studio:

Ray Wolfe/K-Tell

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
2150 Ward St. St Laurent, QC H4M 1T7

Studio:

red light district

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
D. Giarrusso, At Red Light District, 9300 Oso St., Chatsworth, CA 91311

Studio:

Rock Hard Entertainment

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
5362 Cahuenga Blvd. #16 North Hollywood, Ca 91601

Studio:

shooting star

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
M. Blank 2717 South El Camino Real San Clement CA 92672

Studio:

Silverstone Entertainment/Powered By Holiday Pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
B.Mendleson and/or J.Richman 9145 Owensmouth Ave. Chatsworth, Ca. 91311

Studio:

simon wolf

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
R. Herrera 8944 Mason Ave Chatsworth CA 91311

Studio:

sin city

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
M. Snyder 9155 Deering Ave. Chatsworth, CA 91311

Studio:

Sin-Sensual Entertainment

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
5362 Cahuenga Blvd. # 16 North Hollywood, Ca 91601

Studio:

smash pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
S. Wall, 9619 Canoga Ave., Chatsworth, CA 91311

Studio:

Starr Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: Elizabeth Starr, 6758 Franklin Place, Hollywood CA 90028

Studio:

sunshine

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
R. Duak 7722 Densmore Ave. Van Nuys, Ca. 91406

Studio:

Supercore Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: D. Duran 14141 Covello St. Suite 1-D,Van Nuys CA 91405

Studio:

Temptation

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
J. Garfinkel, Custodian of Records: 18716 Oxnard St., Room 1308, Tarzana, CA 91356

Studio:

totally tasteless videos

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
M Chalfin 9718 Glenoaks Blvd. Unit T Sun Valley CA 91352

Studio:

Totally Tight Video

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: M. Chalfin, 9718 GlenOaks Blvd. Unit B, Sun Valley CA 91352

Studio:

Trans-Sex Films

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: S. Baer 5362 Cahuenga Blvd., North Hollywood, CA 91601

Studio:

Twisted Tommy Production/Powered By Holiday Pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
B. Mendleson & J. Richman 9145 Owensmouth Ave. Chatsworth, CA 91311

Studio:

Twisty Media USA

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Patrik Kohl, 268-599B Younge Street,Toronto Ontario M4Y 1z4

Studio:

typhoon

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
M. Blank 2717 S. El Camino Real San Clamente, CA 92672

Studio:

TY Lattimore Entertainment/Throttle Media

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
TY Lattimore 2020 Howell Mill Rd suite c221 Atlanta ,Ga 30318

Studio:

USA Jock

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Tyler Reed 422 Bridlewood ave. SW Calgary Alberta, T2y4H4 Canada

Studio:

Visual Images-Mark Woods Production/Powered By Holiday Pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
B. Mendelson & J. Richman 9145 Owensmouth Ave Chatsworth, Ca 91311

Studio:

Vixen Pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: J.R. 9909 Topanga Cyn Avenue Suite #230, Chatsworth, CA 91311

Studio:

V-9 Video

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: A Rottenburg, 1407 E. 5th Ave., Tampa, FL 33605

Studio:

wayne enterprises

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Wayne Enterprises & DMN Productions

Studio:

Web Coast International

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: R.Glenn 9245 Reseda Blvd. Suite 449, Northridge CA 91324

Studio:

Wild Life

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Bobby Rinaldi 21418 Parthenia St. Canoga Park CA 91304

Studio:

X-Traordinary Pictures/Powerd By Holiday Pictures

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
B. Mendleson & J. Richman 8955 Fullbright Ave. Chatsworth, CA 91311

Studio:

XP Video

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: A Rottenburg, 1407 E. 5th Ave., Tampa, FL 33605

Studio:

Xtreme Productions

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
John Dragotta 2949 Industrial Road, Suite C Las Vegas ,NV 89109

Studio:

XXX Home Videos

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
Custodian of Records: Ralph Sosa and JJ Digital Production 2401 N.W. 30th Avenue Miami, FL 33142

Studio:

zero tolerance

All records required to be kept by federal law are in the possession and available for inspection during all reasonable hours at :
G. Alves 8944 Mason Ave. Chastworth CA 91311

------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline Content-Type: image/png Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/images/background/i_bg.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAEAAAAUCAYAAABMDlehAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpi+PTp038mBiAAET9AxHcQ 8QVOfAIRH0HEBzjxHpVASHyE6wDp/Q8iGL8DBBgAapwWBScMFioAAAAASUVORK5C YII= ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline Content-Type: image/png Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/images/content/scene/menu_item.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAIEAAAAiCAYAAAB4KLoQAAAACXBIWXMAAAsTAAAL EwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj33 3vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEs DIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIe EeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH /w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAn f+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJ V2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4 mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHg g/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl 7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/A V/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5 WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQ WHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAA RKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv 1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4 IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGy UT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPE bDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhM WE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPE NyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD 5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2h tlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0 dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHK CpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2ep O6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN 2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIp G6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3n U9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36 p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYP jGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLn m+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cR p7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0H DYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dn F2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofc n8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh 7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJ gUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5p DoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85 ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7 F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/R NtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9 MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo 1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5 sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWF fevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTP ZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJ zs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ +7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3v dy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtb Ylu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ7 52PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7 nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9 zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9D BY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfy l5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT 0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADq YAAAOpgAABdvkl/FRgAAAHtJREFUeNrs18ENgDAMBMEzitIO/ddGwHnwoQdmSjit HKjuPsOvjSSPGURwmUEELoEIsswggtsMIhCBCEQgAhGIwIchfhHxHOASIAI8B7gE vA4TMKpqmsElQASIABGYABEgAkSACBABIkAEiAARIAJEgAj42gAAAP//AwBqTRJu mUdB6gAAAABJRU5ErkJggg== ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline Content-Type: image/png Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/images/content/scene/glider_bt_up.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAEYAAAAmCAYAAAB52u3eAAAACXBIWXMAAAsTAAAL EwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj33 3vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEs DIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIe EeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH /w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAn f+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJ V2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4 mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHg g/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl 7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/A V/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5 WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQ WHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAA RKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv 1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4 IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGy UT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPE bDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhM WE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPE NyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD 5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2h tlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0 dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHK CpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2ep O6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN 2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIp G6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3n U9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36 p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYP jGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLn m+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cR p7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0H DYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dn F2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofc n8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh 7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJ gUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5p DoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85 ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7 F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/R NtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9 MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo 1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5 sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWF fevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTP ZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJ zs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ +7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3v dy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtb Ylu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ7 52PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7 nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9 zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9D BY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfy l5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT 0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADq YAAAOpgAABdvkl/FRgAAA+FJREFUeNrsms2LHEUYh5+emczM9sZNIjEGIwExfqDJ QeJFCASUHHIxJBAS8g+IkIMo3jyJoBcPghjwklwS2ItCUDwsLgRFQVASFhdWDZtI QhJld7I6Hz293VVefi21nemZSbIfM0y/8FJdRW/31DNv/d63ataz1lpyu8cKOYIc TA5mNaw0IJ/jZ+f6KeDRUQIzD0wDPwGz6t/scv8Y8IJ8D3AQOAAU1+PDemuclaaB SeDrHhDGnes2EGXcVwZeBU4AR4EtwwRmEfgU+DwFowJMCMKY+uUuzzFAS94G/gHq gHUgHQXeBfYPMpi/gY8EpK6xCenF1h4Q+jUrQAtADYg1fhD4QEttYMDEwBngPWBJ uvU48NgqwegGqQbcAhoaOwF8DOzaaDCzwElgRkCeEJB1EUjH/gVuqN0MfAic3igw Z4B3gADYATy5AUA66dufQAi8Dpx90NT/IGBC4A3gnET0acAfoNosVvTcAXYD3yjl rymYOnBEaXiHXjyo1XNNtdIE8IUEek3ALAGvAb+oOt0+BJV9CMwpir4CDq02mBZw GPgOeFbfwrBYBPwmON8Cr/QFxhjTD5gjnuddBJ4Btg3hnjAGZq21ZeCHfjSnH314 X1B2DSkUlC33eJ5XB447BWh2xMRx3C1ipoDDhUJhs5aQ9xDFWCw36ruOM15w3uM5 /eS6mLrnfmwBuGqMOQWc7womiiLbJQM9XywWbwP7+qhirTO5WGs7dnzZGTOOWyfc rSbugklAJFBKwCa1BbXuPV4PaFeBhTiOzwOnMsEsLy9ngXmrVCp9opS8sweQUBMP teFLPBlPoPUCiwOklwQUBajibEirGkvAeRmZaiaKop3Ar1k7dK/dbncCcxl4uVwu V4AXO7wg1guS3W/gQDApX9NjEydS0rCqKkDHOkT7X8C1MAzfBD7r+OAgCDqBOVap VL5MZSGjKAiAptpAY3HqG99oS5ZY1XHfiSiAK+12G+B3rYqVYFqtVnpCl6vV6kt6 0F4nOhrOmUi4DtGw2lnJ1wZzi6JoEbgeBEHHqPEajUYazEnf9ye1B3oEuKvyuuGc fwzjb1GJKJdVoG4F5pvNpgdcT+towVqL44vW2osiHOkPbitSolR6HTZLEkCgtH0T KPu+H1prL6Q43APmwvj4eEvidUeREgwxjG6VcEOJA2vtuTSYkjErpGJSbZPRMANg jJnRYdu+TktpyVr7IyNomv9UVsR8D8S1Wo0RtWng7aRTck4dphhtuyTtKabBzIw4 mDrwB/BcGswcuc39D0Ya06L7T6ijYvNpjVnKmYC2CTmYDJ1ZAaaeM1kJJv+Pqgz7 bwBEUL8H+fRJnwAAAABJRU5ErkJggg== ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline Content-Type: image/png Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/images/content/scene/glider_bt_down.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAEYAAAAjCAYAAAApF3xtAAAACXBIWXMAAAsTAAAL EwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj33 3vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEs DIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIe EeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH /w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAn f+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJ V2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4 mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHg g/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl 7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/A V/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5 WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQ WHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAA RKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv 1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4 IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGy UT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPE bDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhM WE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPE NyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD 5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2h tlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0 dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHK CpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2ep O6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN 2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIp G6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3n U9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36 p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYP jGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLn m+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cR p7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0H DYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dn F2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofc n8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh 7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJ gUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5p DoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85 ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7 F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/R NtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9 MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo 1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5 sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWF fevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTP ZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJ zs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ +7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3v dy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtb Ylu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ7 52PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7 nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9 zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9D BY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfy l5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT 0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADq YAAAOpgAABdvkl/FRgAAA5NJREFUeNrkmU1oE1EQx39v08akREt7Ki0WCoVKsSe9 CIVCpQcvFb0UcioIguDBi+BJQTx4FUXQiydBT6IoBYUiKIKi9KQIHvwihWI/ME2a 3abZ9dB55XWTNNs0qclmYHi7jyW7+8t/5s28ValUygM+Acd7e3s7gKO0ni3Mz8// BM4D9wDalFLmBS6taZ6PA5aMCRkLLQqm4OOwpZjOVgcjHMqCcYF1INpiYBzh0L0V SkoplFJxpVSfzNktqJiccBiQkTbL0mmGISAFrAGHapnYJEQLokjP5xjzFqCzoDLO 9XHEd02t8osjHIb8oQQwAswCaaCnipd3DQgbBowCkDfmXMM94+E8eXETjAahobQB 7TJaMprXqCqgrcqqlAAGS4GZAG7pCwPewJOclJfRMVzPewHKAM84rnRfDakdOCAe BWIyp8EFBZQGUEqNye8WgRldWVmJdHV1FYAMcHAH6a0DOXHbgOD6vNrQqyR9rULb pygNKwbExaMBwYybk2aO6QROAG+BZR8YV1RgSw6yxR0jDPa9KDMg+RXVJnC0dxiK MpW0Jo5lWRPbwPgqvikBswQcNkIlK2Qzct7IFbIuOdblmSMCJiF/ftzIS4sA6XR6 RCk1so2uZVkYnsxkMnFJlIsC6Jf4kiik2doGnRoWgB+y8q7K/JJAmPZxKFJMNzAJ PAZ+i/Sc/xQqtQ47T8I/LxEQAfLZbDaqlEoWZXhd0Bh+xSBthwBKKQVljaR7TinV U8Qhl8uVevGzsVjsSdjLXdu2o8A3oD+IYlBKXXUcJxJ2MKKW/pIMHMcpFyqXpOAL q/UBn40Geju0fD5fDkwGOCJZPIz2EEiWVdPGxsZOyfUVcCqE+zRJAVM+zAqFQqVV 5zpwLURQhoH35qZUSTCu6wZZjk8Dz0IApRN4J3AqdqpB7BEw1uRQ4sBMECgAyvO8 oAXcX+Akm59ams2iwHPZWglk1i5l+BoYbzIo3cDL3UDZLRgkYc0A000CpR94U00a sKqU5QPgrsRto9okMBc0p9QCjLYLwEc294obyRLAbeApxueQ/QSja4I5eZDOBoAy BXwFLu65j9rFqlTJ/gA3gfvSTuynjQE3gNGaNZg1BKNtGbgjgOrZZ0WBM8Bl4FjN O+86gDFtls3dwBc1ghSVcmFKoNQtfOsNxrTvAuoD8EXOUxUq1WHxQQmXUYxvP3Xd q9lHMDuZWU0P7GU1CRuYhrN/AwA0RBXjgxsrSgAAAABJRU5ErkJggg== ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline Content-Type: image/png Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/images/content/scene/glider_gr_up.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAPAAAAAXCAYAAAA1FMKoAAAACXBIWXMAAAsTAAAL EwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj33 3vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEs DIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIe EeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH /w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAn f+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJ V2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4 mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHg g/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl 7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/A V/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5 WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQ WHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAA RKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv 1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4 IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGy UT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPE bDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhM WE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPE NyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD 5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2h tlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0 dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHK CpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2ep O6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN 2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIp G6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3n U9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36 p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYP jGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLn m+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cR p7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0H DYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dn F2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofc n8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh 7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJ gUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5p DoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85 ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7 F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/R NtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9 MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo 1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5 sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWF fevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTP ZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJ zs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ +7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3v dy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtb Ylu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ7 52PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7 nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9 zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9D BY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfy l5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT 0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADq YAAAOpgAABdvkl/FRgAAAH9JREFUeNrs2MEJgDAQRNGJ5iDYf6mCnuJBbUFdeA/S QOAzsG2MEaCmyReAgIEPtPsBFhh4U7fAIGBAwICAQcBAhYBdosECAwIGBAwCBn4f sCMWWGBAwICAQcDA7wOOiKGkMee6Qnd/AeUcz/KuSRZLDDWWN8meZDsBAAD//wMA hD0IW64/LvgAAAAASUVORK5CYII= ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline Content-Type: image/png Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/images/content/scene/glider_gr_down.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAPAAAAAXCAYAAAA1FMKoAAAACXBIWXMAAAsTAAAL EwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj33 3vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEs DIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIe EeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH /w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAn f+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJ V2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4 mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHg g/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl 7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/A V/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5 WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQ WHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAA RKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv 1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4 IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGy UT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPE bDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhM WE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPE NyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD 5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2h tlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0 dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHK CpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2ep O6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN 2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIp G6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3n U9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36 p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYP jGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLn m+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cR p7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0H DYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dn F2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofc n8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh 7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJ gUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5p DoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85 ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7 F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/R NtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9 MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo 1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5 sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWF fevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTP ZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJ zs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ +7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3v dy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtb Ylu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ7 52PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7 nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9 zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9D BY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfy l5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT 0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADq YAAAOpgAABdvkl/FRgAAAIhJREFUeNrs2zsKwkAYRtGbB0Rw/0sVrIyFTcp0yeA5 S/jh8sHATP08q0c1BdzdXr2r13KIFxjHWs1ztbkFDGlbD5MMDDjD4gUBAwIGBAz/ EvDHGcACAwIGBAwCBu4esEcssMCAgIHTlvwBBgED1wQMDGp2AhjXtO/esMACAwIG zvsCAAD//wMARLQTYlqDfFAAAAAASUVORK5CYII= ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline Content-Type: image/gif Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/images/background/report_submit.gif Content-Transfer-Encoding: Base64 R0lGODlhAQASAMQAACQlJhwdHVJWW0pNUVpeZE5SVi0uMGBlajEzNVZaX11iZ0BD RjY4OxkZGiAhIkVITDs9QSgpKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABABIAAAUP4KEQiVAMzwIxiBEBTtCE ADs= ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline Content-Type: image/png Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/images/background/px18.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAEAAAASCAYAAACaV7S8AAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAChJREFUeNpi+P//vx4TAwMDM4hgghOM IIIBjYADJrgOFiwExCiAAAMAIGEDbOmfmVEAAAAASUVORK5CYII= ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline Content-Type: image/png Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/images/background/px22.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAEAAAAWCAYAAAABxvaqAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpJREFUeNpi+P//vx4TAwMDC4hgABFM cIIBJ8EA1AamEYqZ8RIQ4wECDAACTAZx3gHcCQAAAABJRU5ErkJggg== ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=common.css Content-Type: text/css; charset=utf-8; name=common.css Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/common.css Content-Transfer-Encoding: 8bit @charset "utf-8"; /* CSS Document */ /*general*/ * { margin:0px; padding:0px; } html, body {width:100%;} html { } body {height:100%; font:68.75%/1.4 Tahoma, Arial, Verdana, Sans-Serif; color:#666666; background:#e2e2e2;} img { border:none; } .center { margin:0pt auto; width:960px; } .clear { clear:both; } .fl { float:left; } .fr { float: right } a { color:#666666; text-decoration:none; } a:hover { text-decoration:underline; } input { font-family:"Trebuchet MS"; font-size:10px; color:#434244; background:none; border:none; border-collapse:collapse; } input[type="image"], input[type="submit"]{height:0; width:0; font-size:0; padding:0; line-height:0;} textarea{resize:none;} a.red { color:#BA3132;} li {list-style:none;} .inline {display:inline} /*temp*/ #wrap {width:962px; margin:auto; position:relative;} /*header*/ #header {/*height:87px;*/ overflow:hidden; position:relative; font-family:'Trebuchet MS', Tahoma, Arial, Verdana, Sans-Serif; margin:auto; font-size:10px; height:90px;} #logo { float:left; margin-left:11px; margin-top:33px; background: url(images/logo.png) no-repeat; height:40px; width:263px; display:block; margin-bottom:15px;} #header #language {position:absolute; top:0; right:0; height:22px; float:left;} #header #language .bar_r {background:url(images/langr.gif) right top no-repeat; padding-right:3px; float:left;} #header #language .bar_l {background:url(images/langl.gif) left top no-repeat; padding-left:3px; float:left;} #header #language .bar {background:#4b4b4d; padding:5px 4px 0 4px; height:17px; overflow:hidden; float:left;} #header #language .bar p {color:#fff; font-size:0.91em; text-transform:uppercase; padding-right:40px; float:left;} #header #language .bar ul {float:left; position:relative; top:-2px;} #header #language .bar li {padding:3px; float:left;} #header #language .bar .active {background:url(images/lang/lg_bg.gif) 1px 1px no-repeat;} #header #language .bar li img {display:block;} #header #user_info {overflow:hidden; position:absolute; top:10px; right:5px; font-family:'Trebuchet MS', Tahoma, Arial, Verdana, Sans-Serif; float:right;} #header #user_info h2 small {color:#999; font-size:0.91em; text-transform:uppercase; font-weight:normal;} #header #user_info h2 span {color:#434244; font-size:1.63em;} #header #user_info li {display:inline;} #header #user_info ul {margin-left:80px; font-size:0.91em; color:#999; text-transform:uppercase;} /*language selector #header .lang { height:22px; width:301px; float:right; color:#FFFFFF; background-color:#4B4B4D; } div.lngsel { padding-top:3px; padding-left:3px; padding-right:43px; float:left } .lng { margin:1px; margin-top:3px; padding:2px; float:left } .lon { background:url(images/lang/lg_bg.gif) no-repeat; }*/ input.login { border:1px solid #A6A6A6; height:20px; line-height:21px; margin-left:5px; margin-right:3px; padding-left:5px; padding-right:5px; width:119px; background-image:url(images/background/i_bg.png); background-repeat:repeat-x; background-color:#FFF; border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px; } /*Horizontal Arr button*/ #login_btn{ border-width:1px; border-style:solid; border-color:#a6a6a6; width:20px; height:20px; display:block; background-image:url(images/background/i_bg.png); background-repeat:repeat-x; background-color:#FFF; position:relative; margin-left:5px; border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px; cursor:pointer; } #login_btn .arr{width:5px;height:1px;position:absolute;background:#ba3132;} #login_btn .arr1{top:4px;left:5px;} #login_btn .arr2{top:5px;left:6px;} #login_btn .arr3{top:6px;left:7px;} #login_btn .arr4{top:7px;left:8px;} #login_btn .arr5{top:8px;left:9px;} #login_btn .arr6{top:9px;left:10px;} #login_btn .arr7{top:10px;left:10px;} #login_btn .arr8{top:11px;left:9px;} #login_btn .arr9{top:12px;left:8px;} #login_btn .arr10{top:13px;left:7px;} #login_btn .arr11{top:14px;left:6px;} #login_btn .arr12{top:15px;left:5px;} /* End Horizontal Arr button*/ #next_btn{ left: -8px; position:relative; top: -4px; } #next_btn .arr{width:5px;height:1px;position:absolute;background:#ba3132;} #next_btn .arr1{top:4px;left:5px;} #next_btn .arr2{top:5px;left:6px;} #next_btn .arr3{top:6px;left:7px;} #next_btn .arr4{top:7px;left:8px;} #next_btn .arr5{top:8px;left:9px;} #next_btn .arr6{top:9px;left:10px;} #next_btn .arr7{top:10px;left:10px;} #next_btn .arr8{top:11px;left:9px;} #next_btn .arr9{top:12px;left:8px;} #next_btn .arr10{top:13px;left:7px;} #next_btn .arr11{top:14px;left:6px;} #next_btn .arr12{top:15px;left:5px;} #prev_btn{ left: -8px; position:relative; top: -4px; } #prev_btn .arr{width:5px;height:1px;position:absolute;background:#ba3132;} #prev_btn .arr1{top:4px;left:6px;} #prev_btn .arr2{top:5px;left:5px;} #prev_btn .arr3{top:6px;left:4px;} #prev_btn .arr4{top:7px;left:3px;} #prev_btn .arr5{top:8px;left:2px;} #prev_btn .arr6{top:9px;left:1px;} #prev_btn .arr7{top:10px;left:1px;} #prev_btn .arr8{top:11px;left:2px;} #prev_btn .arr9{top:12px;left:3px;} #prev_btn .arr10{top:13px;left:4px;} #prev_btn .arr11{top:14px;left:5px;} #prev_btn .arr12{top:15px;left:6px;} #header div.auth span{padding-left:0px;} #header div.auth {float:right;right:5px;position:absolute;top:15px;height:60px;width:304px; } table.auth { margin-top:7px; float:right; border-collapse:collapse; font-size:10px} tr.auth { text-indent:5px; line-height:13px; } /*login/authorization page*/ #login {font-size:11px; color:#333;} #login div.incorrect{ width:636px; border:1px solid #ba3132; color: #ba3132; text-align:center; padding:13px; margin:5px 0px} #remember_pass input.text, #login input.text{width:200px; background-color:#f5f5f5; border: 1px solid #d7d7d7; padding:2px; background-image:url(images/background/i_bg.png);} #login label{padding:5px 0px; display:block;} #login span{padding: 5px 15px 0 0; color:#333; float:left; width:100px; text-transform:uppercase;} #login .button{position: relative; top:6px;} #login ul{padding:5px 0pt 5pt 115px;} #login li {list-style:none;} #login li a{color: #ba3132; text-decoration:underline;} #login a.txtbutton{width:75px; display:block; margin:5px 0px 0px 115px;} #login .verify input{width:114px;} #login .verify span{line-height:1em; padding-top:0px;} /*Forgot password */ #remember_pass {margin-top:10px} #remember_pass p{margin-bottom:20px;} #remember_pass p .red{ font-weight:bold;} #remember_pass form{position: relative;} #remember_pass label{font-weight:bold} #remember_pass input.text{margin-top:6px;} #remember_pass input.button{position:absolute; left:246px; top:5px;} /*info block*/ .count { float:left } div.count { margin-top:26px; } img.count { height:24px; margin-top:33px; padding-right:16px;} .info {font-size:25px;color:#ffffff;} .b { float:right; width:3px; height:37px; } /*.lt { background:url(images/info_bg_left.gif) no-repeat scroll left top; float:left; padding-left:3px;} .rt { background:url(images/info_bg_right.gif) no-repeat scroll right top; float:left; height:37px; padding-right:3px;}*/ #cdvd { padding-left:40px;} #cscene, #csize{border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;background-color:#9E9E9E;margin:26px 9px 0 10px;padding:2px 10px 0;} #csize { margin:26px 9px 0 3px; } /*body*/ /*#tophr { height:2px; background-image:url(images/hru.gif); } #lowhr { height:2px; background-image:url(images/hrl.gif); } .main { border-left:1px solid #A6A6A6; border-right:1px solid #A6A6A6; background-color:#FFFFFF }*/ .nav { height:33px; } a.nav { height:33px; display:block; float:left } #side_pane { width:250px; float:left; margin-top:16px; } #outer { border-color:#A6A6A6; border-width:1px; border-style:solid; border-radius:4px; -moz-border-radius:4px; -webkit-border-radius:4px; background:#fff; padding-bottom:3px; } /* top menu old */ .top_menu{height:32px; width:960px; background-color:#F1F1F1; position:relative; /*padding-top:3px;*/border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;} .top_menu li{float:left; /*background:url(images/bg/menu_top_border.gif) no-repeat top left;*/ border-left:#FFFFFF solid 1px;} .top_menu li.no_border{ border-left:none;} .top_menu li div{float:left; /*background:url(images/bg/menu_top_active.png) repeat-x top left;*/ height:32px;} .top_menu li a{display:table-cell; font-family:"Trebuchet MS"; font-size:11px; font-weight:bold; height:32px; line-height:11px; overflow:hidden; position:relative; text-align:center; text-transform:uppercase; vertical-align:middle; width:136px; text-decoration:none;} .top_menu .logged li{width:16,5%;} .top_menu .logged li a{width:160px;} .png_bg_scale a { color:#BA3132;} .menucolor { color:#333333;} /* - top menu old - */ /* top menu */ .top_menu{height:32px; width:960px; background-color:#F1F1F1; position:relative; border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;} .top_menu .bg{height:32px; position:relative;} .top_menu td.no_border{ border-left:none;} .png_bg_scale a {background: url("images/content/scene/menu_item.png") repeat scroll center bottom #BA3132; color:#fff !important; font-family:"Trebuchet MS"; font-size:11px; font-weight:bold; text-transform:uppercase; display:inline-block; height: 32px; line-height: 32px;min-width: 40px;width: 100%; text-decoration:none;} .menutd{background:url(images/content/scene/menu_item.png) repeat center bottom;text-align:center; height:32px; border-left:1px solid #FFFFFF;} .menucolor{color:#333333; font-family:"Trebuchet MS"; font-size:11px; font-weight:bold; text-transform:uppercase;display:inline-block; height: 32px; line-height: 32px;min-width: 40px;width: 100%; } .menucolor:hover{background: url("images/content/scene/menu_item.png") repeat scroll center bottom #BA3132; color:#fff;text-decoration:none;} /* - top menu - */ /*search box*/ #searchbox { margin-left:11px; padding-bottom:38px; } /*#search_bg { width:162px; height:18px; float:left; margin-right:5px; text-align:center; background:transparent url(images/search_bg.gif) no-repeat scroll 0%; }*/ input.search { height:16px; margin-right:5px; margin-bottom:-2px; vertical-align:top; border:1px solid #A6A6A6; line-height:21px; width:162px; background-color:#FFF; border-radius:1px;-moz-border-radius:1px;-webkit-border-radius:1px; background-image:url(images/background/i_bg.png); float:left; } div.radio { margin-right:6px; padding-top:4px; float:left;} label.radio { font-size:11px; line-height:15px;} #rad1 {margin-left:1px;} #rad2 {margin-left:12px;} /*menu boxes*/ /*.menutitle { margin-bottom:12px; padding:5px 5px 5px 11px; font-size:11px; font-weight:bold; border-bottom:1px solid #D1D1D1; } .menubox { margin-bottom:24px; margin-left: 8px; } div.menu { margin-right:3px; padding-bottom:3px; padding-left:25px; padding-top:3px; font-size:11px; border-bottom:1px solid #F1F1F1; } .ul1 { background: url(images/ul_bg_r.gif) no-repeat scroll 9px 7px; } .ul2 { background: url(images/ul_bg_g.gif) no-repeat scroll 9px 7px; } a.menu { display:block; } .menur { float:right; padding-right:10px; } div.crumb { margin-top:7px; padding-bottom:6px; font-size:11px; border-bottom:1px solid #D7D7D7; position:relative; } img.crumb { vertical-align:bottom } */ /*Glider*/ .glide_categories{position:relative; margin:0px 0px 24px 8px;} #glide_categories .menubox{margin:0px;} #glide_categories .list_categories{height:32000px; width:249px;} #glide_categories .scroller{width:250px; height:309px; overflow:hidden; position:relative;} .glide_categories .glide_up{display:block; height:34px; width:70px; margin:0px auto; background:#cd3637 url(images/content/scene/glider_bt_up.png) bottom center no-repeat;border-radius:36px 36px 0 0; -moz-border-radius:36px 36px 0 0; -veb-kit-border-radius:36px 36px 0 0;} .glide_categories .glide_down{display:block; height:34px; width:70px; margin:0px auto; background:#cd3637 url(images/content/scene/glider_bt_down.png) top center no-repeat;border-radius:0 0 36px 36px;; -moz-border-radius:0 0 36px 36px;; -veb-kit-border-radius:0 0 36px 36px;} .glide_categories .up{background:url(images/content/scene/glider_gr_up.png) bottom center no-repeat;} .glide_categories .down{background:url(images/content/scene/glider_gr_down.png) top center no-repeat;} #sitebanner { margin-top:9px; padding-bottom:10px; border-bottom:1px solid #d7d7d7; } h1, h2 { color:#BA3132; line-height:21px; } h1 { font-size:16px; } h2 { font-size:11px; } #dvdday { width:93px; height:91px; position:absolute; margin-left:120px; margin-top:-20px; } a.dvdday { display:block; width:93px; height:91px; } .picofday { float:left; width:231px; margin-top:7px; margin-bottom:15px; padding-left:2px; padding-top:2px; line-height:14px; background:transparent url(images/pic_of_day_bg.gif) no-repeat scroll left top; } .body{margin-right:12px;} /*.covers { border-top: 2px solid #ba3132; border-bottom: 2px solid #ba3132; width:680px;}*/ .covers { border-top: 2px solid #ba3132; width:680px;} #content_box { width:696px; padding:0px 0px 20px 14px; float:left; } .contenttitle { margin-top:4px; margin-left:1px; } .covertitle { width:161px; padding-top:1px; border-bottom:1px solid #D7D7D7;} .scentitle{ font-size:11px; padding-bottom:5px;} h2.scentitle{line-height:14px;} .scentitle span a{color:#333;} .coverbox { float:left; width:168px; margin-bottom:15px; margin-top:10px; padding-left:2px; padding-top:2px; line-height:14px; /*background:url(images/cover_bg.gif) no-repeat scroll left top;*/} .coverbox_last{float:left; width:168px; margin-top:10px; margin-bottom:15px; padding-left:2px; padding-top:2px; line-height:14px; /*background:url(images/cover_bg.gif) no-repeat scroll left top;*/} .coverbox_last img, .coverbox img{width:160px; height:213px; display:block; border: 2px solid #FF0000; border-radius: 3px; -moz-border-radius: 3px; -veb-kit-border-radius: 3px;} .castbox_last { margin-top:8px; margin-bottom:8px; padding-left:2px; padding-top:2px; line-height:14px; text-align:center; overflow:hidden; float:left; width:152px; padding-right:0px;} .castbox { margin-top:8px; margin-bottom:8px; padding-left:2px; padding-top:2px; line-height:14px; text-align:center; overflow:hidden; float:left; width:152px; padding-right:16px;} .castbox_last strong a, .castbox strong a{font-size:12px; font-weight:bold; color:#BA3132} .castbox_last small a .castbox small a{font-size:11px; font-weight:bold; color:#666;} p.cast_index{padding:10px 0px 4px 2px; font-size:14px} .scenebox { margin-top:8px; margin-bottom:8px; padding-left:2px; padding-top:2px; line-height:14px; text-align:left; overflow:hidden; display:inline;} .scene_pic{float:left; padding-top:8px;} .castbox img, .scene_pic img{border:1px solid #aeadb2;} .scene_descript{float:left; padding: 5px 0px 10px 10px; width:345px; font-size:11px; color:#333} .scene_descript p{padding: 8px 0px;} .scenebox .contenttitle h1{font-size:20px; font-weight:bold;} .scenebox div.dvd_info{width:261px; float:left; line-height:18px;} .scenebox div.button{padding-top:6px} .scenebox p.categories, .scenebox p.cast{width:150px;} li.scenebox{float:left; display:block; width: 155px; padding-right:10px; text-align:center;} /*li.scenebox img{border:1px solid #aeadb2; height:112px; width:153px;}*/ /*tour*/ div.tourbox { padding-bottom:30px; padding-right:15px; font-size:11px; line-height:15px; border-bottom:1px solid #D7D7D7 } h1.tour { padding-bottom:10px; } div.tourjoin { width:696px;height:118px;/*background:transparent url(images/tour_bg.jpg) no-repeat 0 0;*/ padding-top:42px; } img.tourjoin { margin-top:42px; margin-left:1px; } div.p{padding:10px 0;} /*Vertical Arr button*/ .perpage{ width:20px; position:absolute; right:10px; z-index:1001; top:-3px;} .perpage .arr{width:1px;height:5px;position:absolute;background:#d7d7d7;} .perpage .arr1{top:16px;left:10px;} .perpage .arr2{top:15px;left:9px;} .perpage .arr3{top:14px;left:8px;} .perpage .arr4{top:13px;left:7px;} .perpage .arr5{top:12px;left:6px;} .perpage .arr6{top:11px;left:5px;} .perpage .arr7{top:11px;left:16px;} .perpage .arr8{top:12px;left:15px;} .perpage .arr9{top:13px;left:14px;} .perpage .arr10{top:14px;left:13px;} .perpage .arr11{top:15px;left:12px;} .perpage .arr12{top:16px;left:11px;} #perpage_join{ width:20px; position:absolute; right:62px; z-index:1001; top:1px;} #perpage_join .arr{width:1px;height:5px;position:absolute;background:#d7d7d7;} #perpage_join .arr1{top:16px;left:10px;} #perpage_join .arr2{top:15px;left:9px;} #perpage_join .arr3{top:14px;left:8px;} #perpage_join .arr4{top:13px;left:7px;} #perpage_join .arr5{top:12px;left:6px;} #perpage_join .arr6{top:11px;left:5px;} #perpage_join .arr7{top:11px;left:16px;} #perpage_join .arr8{top:12px;left:15px;} #perpage_join .arr9{top:13px;left:14px;} #perpage_join .arr10{top:14px;left:13px;} #perpage_join .arr11{top:15px;left:12px;} #perpage_join .arr12{top:16px;left:11px;} /*End Vertical Arr button*/ /*menu boxes*/ .menutitle { margin-bottom:12px; padding:5px 5px 5px 11px; font-size:11px; font-weight:bold; border-bottom:1px solid #D1D1D1; } .menubox { margin-bottom:24px; margin-left: 8px; } .menubox .bullet{ float:left; height:6px; margin:4px 10px 0 9px; width:6px; } div.menu { margin-right:3px; padding-bottom:3px; padding-top:3px; font-size:11px; border-bottom:1px solid #F1F1F1; } .ul1 .bullet{background:#eb7576;} .ul2 .bullet{background:#b4f221;} a.menu { display:block; line-height:15px;} .menur { float:right; padding-right:10px; } div.crumb { margin-top:7px; padding-bottom:6px; font-size:11px; border-bottom:1px solid #D7D7D7; position:relative; } /*contact*/ input.contact, textarea.contact { width:225px; height:18px; margin-top:4px; margin-bottom:4px; padding: 2px 4px 0; font-size:11px; color:#333333; background-color:#f5f5f5; border:1px solid #d7d7d7; resize:none; } textarea.contact {width:609px; height:70px; overflow:auto;} td.c1 { width:80px; } td.c2 { width:280px;} td.c3 { width:106px;} td.c4 { width:230px;} td.c5 { vertical-align:top; padding-top:6px;} /*account*/ input.account, textarea.account { width:170px; height:20px; /*padding-left:4px; padding-right:4px; padding-top:4px;*/ font-size:11px; color:#333333; background-color:#f5f5f5; border:1px solid #d7d7d7; margin:5px 40px 2px 0; float:left; resize:none; } div.account, div.change_lang, div.timezone{border-bottom:1px solid #D7D7D7; padding:10px 0px;} div.account label{width:130px;display:block;float:left;padding-top:8px; font-weight:bold;} div.change_pass label {width:140px;display:block;float:left;padding-top:8px; font-weight:bold; clear:left;} div.change_lang label, div.timezone label{width:140px;display:block;float:left;padding-top:5px; font-weight:bold;} div.account span{color:#BA3132;} div.account p, div.change_lang p, div.timezone p{padding:5px 0px} div.change_lang dl, div.timezone dl{float:left;left:0pt;top:0pt;width:225px;} div.change_pass{padding:10px 0px; position:relative;} div.change_pass .submit{position: absolute; top:65px; right:130px;} /* page results navigation*/ #pagenav { height:2px; background-color:#ba3132 } .pagenav { height:23px; margin-left:1px; margin-bottom:14px; font-family:"Trebuchet MS"; color:#4b4b4d; background:url(images/page_nav_bg.gif); border-collapse: collapse; } #nextp { vertical-align:bottom } #nav_cl { width:2px; background-image:url(images/page_nav_bg_l.gif) } #nav_cr { width:2px; background-image:url(images/page_nav_bg_r.gif) } .pnav { width:15px; height:15px; padding-left:4px; padding-right:4px; text-align:center; } a.pnav {display:block; color:#4b4b4d; } .on { background:url(images/page_navbg.gif) no-repeat scroll 0%; background-position:top; color:#ffffff; } /*footer*/ #footer {padding:15px 5px;} img.footer { vertical-align:middle } .poweredby{color: #9C4BC5; font-family: arial; font-size: 14px; font-weight: bold; letter-spacing: -1px;} div.dlbutton { width:144px;height:39px; background:url(images/load_button_bg.gif) no-repeat scroll 0%; padding-top:8px; margin:2px; margin-left:20px; vertical-align:middle;text-align:center; color:#fff; line-height:14px; } .dlbutton a {color:#fff; font-weight:bold;} /*##########################*/ /* older styles */ /*##########################*/ /* Error Message Block */ #messages_out {border:1px solid #ba3132; padding:1px; /*width:734px;*/ margin:10px;} #messages_in {} #messages {padding:0px 10px 0px 87px; position:relative; min-height:56px;} #messages ul {padding:19px 0 19px 88px;} #messages span {position:absolute; top:10px; left:116px; height:56px; width:85px; display:block;} #messages li {font-size:12px; color:#ba3132; font-weight:bold; padding-bottom:5px;} .clearfix:after, .filter:after, .sidebar div.body:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .left{float:left; width:680px; position:relative;} img.logo_begin, img.logo_end{border:1px solid #ba3132;} .frames {width:680px; position:relative;} .frames_bg{ background-color:#f8f8f8; padding: 10px 0px} .frames .aboveframe {padding:0px 0; z-index:102; /*position:relative;*/} .frames .aboveframe_left {float:left;} .frames .aboveframe_right {float:right; } .frames .aboveframe_right a.add_favor, .frames .aboveframe_right a.add_favor:hover{font-size:10px; font-weight:normal;} .frames .aboveframe li {float:left; padding:1px 7px; font-size:10px; color:#525252;} .frames .aboveframe_right li {position:relative;} .frames .aboveframe_right li:first-child {border:none;} .frames .aboveframe_right li small {color:#ba3132; padding:2px 0 2px 17px; background:url(images/content/scene/info.gif) left center no-repeat; cursor:pointer; font-size:1em;} .frames .aboveframe_right li span {color:#528ddb; float:right; padding-top:4px;} .frames .aboveframe_right .tooltip {position:absolute; top:1.5em; right:4px; font-size:0.91em; width:223px; z-index:102; display:none;} .frames .aboveframe_right .tooltip big {font-size:1px; line-height:1px; position:absolute; width:223px;} .frames .aboveframe_right .tooltip h3 {min-height:13px; padding:0 7px 0 10px; text-align:right; color:#fff; background:#cc618c; font-size:1em; font-weight:normal; position:relative; top:16px;} .frames .aboveframe_right .tooltip h3 big {background:url(images/content/scene/tooltip_title.png) top left no-repeat; height:16px; top:-16px; left:0px;} .frames .aboveframe_right .tooltip h3 small {padding:0 0 0 11px; font-size:1em; background:url(images/content/close.gif) left 60% no-repeat; cursor:pointer; color:#fff; position:relative; top:-4px;} .frames .aboveframe_right .tooltip h3 span {float:left; position:relative; top:-4px;} .frames .aboveframe_right .tooltip div {padding:9px 9px 0 11px; color:#525252; background:#f7f7f7; position:relative; top:16px;} .frames .aboveframe_right .tooltip_bot { background:url(images/content/scene/tooltip_bot.png) bottom no-repeat; left:0px; bottom:-17px; height:17px;} .frames .frame_hidden .start, .frames .frame_hidden .end {display:none;} .frames .frame_hidden .frame_center {top:5px;} .frames .scene_hidden {margin:0 0 3px 0; padding:0 4px; /*border-bottom:1px solid #e6e6e6; width:99%;*/} .frames .frame_middle { z-index:101; position:relative; background:url(images/drop_image.gif) 50% 50% no-repeat;} .frames .scene_title{ width:100%; font-size:1.65em; color:#666; margin-bottom:5px; line-height:1.8em;} .frames .scene_title a{color:#ba3132; font-weight:bold;} .frames .scene_title a:hover{color:#ba3132; font-weight:bold;} .frames .timeline {float:none;} .frames .start {float:left;width:171px; padding-left:21px;} .frames .underframe_left strong, .frames .underframe_right strong, .frames .download_links .info, .frames .underframe_left #begin_time span, .frames .underframe_right #end_time span, .frames .download_links .info {color:#525252; font-size:10px;} .frames .underframe_left #begin_time { padding-left:21px; /*background:url(images/content/scene/start_time.gif) left center no-repeat;*/ padding-top:1px;} .frames .end {float:right; width:171px; text-align:right; padding-right:21px} .frames .underframe_right #end_time {padding-left:17px; /*background:url(images/content/scene/end_time.gif) left center no-repeat;*/ padding-top:1px;} .frames .frame_center {text-align:center; position:absolute; top:137px; left:0; width:680px;} .frames .frame_center .fav_add {padding-left:26px; background:url(images/content/scene/add_favourites.gif) 9px center no-repeat; } .frames .frame_center .fav_rem {padding-left:26px; background:url(images/content/scene/rem_favourites.gif) 9px center no-repeat; } .frames .frame_center .how_it_works{padding-left:17px; padding-right:9px; background:url(images/content/scene/how_it_works.gif) left top no-repeat; border-right:1px solid #e1e1e1;} .frames .frame_center a, .frames .download_links .info a {display:inline; color:#e33d6f; font-size:0.91em;} .frames .download_links {position:relative; z-index:101;} .frames .download_links .formats {} .frames .download_links dd {display:none;} .frames .download_links ul { list-style-type:none; clear:left; /*background-image:url(images/content/scene/downlinks_bg.gif); background-repeat:no-repeat;*/ margin:2px 0 0 0; padding:2px 0px 4px 12px; position:relative;} /*.frames .download_links ul li:first-child {background:0; width:auto;}*/ .frames .download_links ul li { width:144px; height:35px; padding-top:4px; background:url(images/background/px39.png); background-repear:repeat-x; /*background:url(images/load_button_bg.gif) no-repeat scroll 0%;*/ background-color:#9E9E9E; border-radius: 4px; -moz-border-radius:4px; -veb-kit-border-radius:4px; margin:2px; margin-left:20px; vertical-align:middle;text-align:center; color:#fff; line-height:14px; float:left} .frames .download_links ul li.active{ background-color: #BA3132;} .frames .download_links ul li a { color:#fff; font-weight:bold;} .frames .download_links ul li span {color:#525252;} .frames .download_links ul li img { position:relative; top:9px;} .frames .download_links .down{display:block; float:left;} .frames .underframe_right {float:right; font-size:10px; padding-right:72px} .frames .underframe {margin:2px 0; line-height:1.5em; z-index:100; position:relative;} .frames .underframe_left {float:left; font-size:10px; width:465px} .frames .underframe_left strong {color:#525252;} .frames .underframe_left .cast{ padding-left:21px; /*background:url(images/content/scene/cast.gif) left center no-repeat;*/ display:block; line-height:1.6em;} .frames .underframe_right .length{ padding-left:17px; /*background:url(images/content/scene/length.gif) left center no-repeat;*/ display:block; line-height:1.6em; color:#525252;} .gallerydvd div.dvd_info .name{ color:#404040; font-size:1.63em; font-weight:bold; padding-left:22px; background-image:url(images/content/gallery/dvd_icon.gif); background-repeat:no-repeat; background-position:0 0px; display:block; float:none; clear:both; margin-bottom:10px; line-height:16px; } /* Scenes */ .content .scene .name, .content .scene div.length{ font-weight:bold; color:#404040; font-size:1.275em; display:block; padding:0px 0px 0px 20px; background-image:url(images/content/gallery/scene2_icon.gif); background-repeat:no-repeat; background-position:center left; text-decoration:none; float:left; position:relative; line-height:15px; margin-top:8px; margin-bottom:8px; margin-right:5px; } .content .scene .name a{ color:#404040; } .model_photos .popup {display:none;} .model_videos .thumb .popup {display:none;} /* rating */ span.rating {word-spacing: 0.5em; white-space:nowrap;} span.rating img {padding:1px 3px; background:no-repeat center; cursor:pointer;} span.rating .userSelected {background:url(images/rate_bg.gif) center no-repeat;} span.rating a {padding:2px 0; cursor:pointer; vertical-align:middle;} .timeline {display:block;height:135px;} .timeline #begin_head, .timeline #end_head {position: absolute; z-index: 2; width: 170px; height: 130px; display: none} .timeline .opacity_black {width: 170px; height: 130px; background-color: black; opacity:0.4; z-index:3; position:absolute} .timeline .opacity_text {width: 170px; height: 87px; opacity:1; color:#ebebeb; font-size:0.92em; font-weight:bold; text-align: center; padding-top:43px; position:relative; z-index:4;} /* Search Tip */ #tip_inner {padding:10px; color:#666; font-size:11px;} #tip_inner h5 {color:#e33d6f; font-size:11px; margin:0; padding:0;} #tip_inner ul {margin-left:10px; margin-bottom:12px; margin-top:3px; padding:0; list-style:none;} #tip_inner ul li {padding-left:10px; /*background:url(images/tip_sign.gif) 0 3px no-repeat;*/ list-style:none; margin-bottom:3px;} .gallerydvd div.dvd_info div.cast, .gallerydvd div.dvd_info div.desc{ color:#737373; width:560px; } /***/ /* List dvds block */ .content .block { padding-top:5px; } .content .block .title, #right_menu .block .title { overflow:hidden; width:100%; position:relative; top:1px; left:-1px; z-index:4; } .content .block .title h2, #right_menu .block .title h2, .content .block .title h3 { float:left; position:relative; font-size:1em; } .dvd_menu dt b.decorTop, .scene_menu dt b.decorTop{ position:absolute; width:3px; height:21px; /*background:url(images/header/menu/left_li_bg.png) no-repeat;*/ float:left; left:0px; } .content #choose_format.block .title dt b.decorTop{ background:url(images/content/scene/left_li_bg.gif) no-repeat; } /*.dvd_menu dt.active b.decorTop, .scene_menu dt.active b.decorTop{ background:url(images/content/scene/decor_top.gif) no-repeat; }*/ .dvd_menu dt b.decorBottom, .scene_menu dt b.decorBottom{ display:block; width:3px; height:21px; /*background:url(images/header/menu/right_li_bg.png) no-repeat;*/ float:left; position:absolute; right:0px; } .content #choose_format.block .title dt b.decorBottom{ background:url(images/content/scene/right_li_bg.gif) no-repeat; } /*.dvd_menu dt.active b.decorBottom, .scene_menu dt.active b.decorBottom{ background:url(images/content/scene/decor_bottom.gif) no-repeat; }*/ .content .block .title h2 span, #right_menu .block .title h2 span, .content .block .title div span, .content .block .title h3 span { padding:8px 13px; display:block; background:url(images/header/menu/li_bg.gif) repeat-x; white-space:nowrap; color:#e33d6f; font-weight:bold; font-size:1em; float:left; text-transform:uppercase; margin:0px 6px; height:14px; position:relative; z-index:3; } .content .block .indexPage h2 span, .content .block .indexPage div span { width:172px; text-align:center; padding:8px 0; } .content .block .title div span.tab_last_pass{ padding:8px 19px; } .content .block .title h2 span strong { color:#666; font-weight:normal; } .content #choose_format.block .title dt{ float:left; position:relative; font-size:1em; margin-right:-1px; cursor:pointer; } .content #choose_format.block .title dt span{ padding:6px 0px; display:block; background:url(images/content/scene/li_bg.gif) repeat-x; white-space:nowrap; color:#e33d6f; font-weight:bold; font-size:1em; float:left; text-transform:uppercase; margin:0px 6px; height:18px; position:relative; z-index:3; width:80px; text-align:center; } .content #choose_format.block .title dt.active span{ background: url(images/content/scene/decor_bg.gif) repeat-x; } .content #choose_format.block .title dt.wma span{ width:105px; } .WMV{ height:21px; /*background-image:url(images/content/scene/wma.png);*/ background-repeat:no-repeat; display:block; margin:4px auto 0; } .MOV{ height:21px; /*background-image:url(images/content/scene/quicktime.png);*/ background-repeat:no-repeat; display:block; margin:4px auto 0; } .PSP{ height:21px; /*background-image:url(images/content/scene/psp.png);*/ background-repeat:no-repeat; display:block; margin:4px auto 0; } .IPOD{ height:21px; /*background-image:url(images/content/scene/ipod.png);*/ background-repeat:no-repeat; display:block; margin:4px auto 0; } .DVD{ height:21px; /*background-image:url(images/content/scene/dvd.png);*/ background-repeat:no-repeat; display:block; margin:4px auto 0; } .FLASH{ height:21px; /*background-image:url(images/content/scene/flash.png);*/ background-repeat:no-repeat; display:block; margin:4px auto 0; } #choose_format {z-index:101; position:relative; margin-top:5px;} #choose_format .body{ height:22px; /*background:url(images/content/scene/choose_bg.jpg) repeat-x;*/ border:0; position:relative; top:1px; padding-top:5px; padding-left:7px; clear:left; } #choose_format .body span{ color:#333; font-size:0.91em; padding-right:6px; } #choose_format .body a{ padding-left:8px; padding-right:6px; color:#ba3132; text-decoration:underline; font-size:0.91em; } #choose_format .body a:hover{ color:#b1b1b1; } /* select.selReplaced {width:1px; position:absolute; left:-999em; float:none;} dl.sbrWrap {margin:0; padding:0; border:none; position:relative; overflow:visible; line-height:1.2em; background:#dde1e0 url(images/background/input_bg.gif) left top repeat-x; border-right: 1px solid #d6d6d6; border-bottom: 1px solid #d6d6d6;} dl.sbrWrap * {position:static; float:none; display:block; width:auto; margin:0; padding:0; border:none;} #acc_set dl.sbrWrap dd {z-index:1001;} dl.sbrWrap dt {cursor:default; color:#666; padding:4px; background:url(images/arrow.gif) right top no-repeat; height:1.1em; overflow:hidden;} dl.sbrWrap dd {position:absolute; z-index:101; left:0; top:100%; margin:0; padding:0; width:100%; overflow:auto; max-height:15em; border:1px solid #cfcfcf; border-left:none; border-top:none; background:#ebebeb; white-space:nowrap; font-size:.9em;} dl.sbrWrap dd ul {width:100%; overflow:hidden;} dl.sbrWrap dd li {padding:1px 3px; cursor:default; color:#333; height:1.1em; overflow:hidden;} dl.sbrWrap dd li.sbrSelected {background:#eee;} dl.sbrWrap dd li:hover, dl.sbrWrap dd li.hover {background:#e1e2e3;} dl.sbrWrap .sbrOptsCol {display:none;} dl.sbrWrap .sbrOptsExp *{display:block;} dl.sbrWrap .sbrFocused {background-image:url(images/arrow_act.gif)} */ select.selReplaced {width:1px; position:absolute; left:-999em; float:none;} dl.sbrWrap {margin:0; padding:0; border:none; position:relative; overflow:visible; line-height:1.2em; background-color:#f5f5f5; border: 1px solid #d7d7d7; } dl.sbrWrap * {position:static; float:none; display:block; width:auto; margin:0; padding:0; border:none;} #acc_set dl.sbrWrap dd {z-index:1001;} dl.sbrWrap dt {cursor:default; color:#666; padding:4px; height:1.1em; overflow:hidden;} dl.sbrWrap dd {position:absolute; left:0; top:100%; margin:0; padding:0; width:100%; overflow:auto; max-height:15em; border:1px solid #d7d7d7; border-top:none; background:#ebebeb; white-space:nowrap; font-size:.9em;} dl.sbrWrap dd ul {width:100%; overflow:hidden;} dl.sbrWrap dd li {padding:1px 3px; cursor:default; color:#333; height:1.1em; overflow:hidden;} dl.sbrWrap dd li.sbrSelected {background:#eee;} dl.sbrWrap dd li:hover, dl.sbrWrap dd li.hover {background:#e1e2e3;} dl.sbrWrap .sbrOptsCol {display:none;} dl.sbrWrap .sbrOptsExp *{display:block;} /*dl.sbrWrap .sbrFocused {background-image:url(images/arrow.gif);}*/ .tabfilter {margin:10px 0px; position:relative;} .filterblock { font-size:11px; padding: 0 14px 7px 0; width:300px; float:left; position:relative; z-index:1000;} .filterblock dl {float:left; left:0pt; top:0pt; width:225px; position:relative;} .filterblock label {float:left; padding-top:5px; width:55px; color:#333;} #stars {padding-top:8px} #stars dl{float:left; left:0pt; top:0pt; width:225px; } #stars label {float:left; padding-top:5px; width:105px; color:#333;} #stars p.nofound{font-size:14px; padding:10px 0px 30px;} #searchForma{position:relative; z-index:100;} .searchtabform_in{position:relative;} .searchtabform input.text, .join_page .info_table div input.text {float:left; width:221px; background-image:url(images/background/i_bg.png);background-color:#f5f5f5; border: 1px solid #d7d7d7; padding:2px; font-size:11px} .searchtabform input.text2{float:left; width:510px; background-color:#f5f5f5; border: 1px solid #d7d7d7; padding:2px; font-size:11px} #stars .button_img, .searchtabform .button_img {position:relative; display:block; left:310px; margin:8px 0px; left:105px} #stars input.text{float:left; width:221px; background-color:#f5f5f5; border: 1px solid #d7d7d7; padding:2px; font-size:11px} #input_helper {position:relative; top:0; left:0; z-index:49;} #input_helper #input_helper_form_field {padding:1px 5px 3px 1px; position:relative; top:0; left:0; width:577px; height:32px;} #input_helper #input_helper_form_field #input_helper_asist {padding:3px 5px; color:#999; border:1px solid #d7d7d7; background-color:#f5f5f5; width:215px; position:absolute; top:1px; left:55px; font-size:11px;} #input_helper #input_helper_form_field #input_helper_start {width:55px; float:left; overflow:hidden; cursor:pointer; font-size:11px; padding-top:5px} .searchtabform_out li {display:none;} .input_helper_div_root {display:none; border:1px solid #d3d3d3;} .input_helper_div_root li {padding:2px 0 2px 20px; color:#666; font-weight:bold; border-top:1px solid #fff; background:url(images/content/searchtabform/arrow.gif) #ebebeb 9px 4px no-repeat;} .input_helper_div_root li:first-child {border-top:none;} .input_helper_div_root li li {margin-left:-20px; font-weight:normal; background:#fff; border-top:1px solid #e6e6e6;} .input_helper_div_root li li:first-child {border-top:none;} .input_helper_div_root li ul {position:relative; top:2px;} .input_helper_div_root li.expand {background:url(images/content/searchtabform/arrow_expand.gif) #ebebeb 6px 8px no-repeat;} .input_helper_div_root li.opened {color:#fff; border:none; background:url(images/content/searchtabform/arrow_opened.gif) #e23a6b 6px 8px no-repeat;} .input_helper_div_first_item {display:none;} .input_helper_div_root li.all {padding:2px 0 2px 5px; color:#e23a6b; background:#ebebeb;} .input_helper_div_root li li.all {padding:2px 0 2px 20px; color:#5c89de; background:#fff;} .input_helper_div_root li input {margin-right:4px;} .input_helper_div_element {display:none;} .input_helper_div_folder {display:none;} .input_helper_div_root .toggler {display:block; margin-left:-20px; padding-left:20px; cursor:pointer;} .filter_pager{ /*background:#f4f4f4;*/ z-index:10; position:relative; /*height:23px;*/ } .filter_pager .filter input[type=hidden]{ display:none; } .filter_pager .wrap{ /*background:url(images/content/block/wrap_bot_bg.gif) bottom repeat-x;*/ /*padding:7px;*/ position:relative; } .filter_pager_top ul{float:left; /*background:url(images/bg_pager.gif) repeat-x bottom;*/} .filter_pager_bot{position:relative; border-top:2px solid #BA3132;} .filter_pager_bot ul{float:left;} .per_page{padding:2px 10px; float:right; position:relative;} .per_page label{padding:3px 10px; float:left; text-align:right;} .timezone .per_page, .change_lang .per_page{float: left; padding: 2px 0;} .timezone .perpage, .change_lang .perpage{right:3px;} .timezone .per_page label, .change_lang .per_page label{padding: 3px 0; text-align: left;} .per_page dl{width:45px; float:left;} /* Main Pager */ .filter_pager_top ul.pager {text-align:left; padding:0px 4px 0 8px; color:#666;} .filter_pager_bot ul.pager {text-align:left; padding:2px 4px 3px 8px; color:#666;} ul.pager{width:300px;} ul.pager li {display:inline; vertical-align:middle; float:none; padding:0; background:none;} ul.pager li.page {margin-right:5px; font-weight:bold; position:relative; top:1px;} ul.pager a {padding:3px 6px; text-decoration:none; color:#666; vertical-align:middle; background:none; display:inline;} ul.pager a.digit_num {padding:0;} ul.pager img {vertical-align:middle; position:relative; top:-1px;} ul.pager a:hover {color:#e33d6f; text-decoration:none;} ul.pager span {padding:5px 7px; color:#fff; vetical-align:middle; position:relative; border-radius: 0px 0px 3px 3px; -moz-border-radius:0px 0px 3px 3px; -veb-kit-border-radius:0px 0px 3px 3px; background-color: #BA3132;} .filter_pager_top ul.pager span {/*background:url(images/bg_pager_up.gif) no-repeat bottom; zoom:1;*/background-color:#BA3132;border-radius: 3px 3px 0px 0px; -moz-border-radius:3px 3px 0px 0px; -veb-kit-border-radius:3px 3px 0px 0px;} .filter_pager_bot ul.pager span, #favor ul.pager span {/*background:url(images/bg_pager_down.gif) no-repeat top; zoom:1;*/ background-color:#BA3132;border-radius: 0px 0px 3px 3px; -moz-border-radius:0px 0px 3px 3px; -veb-kit-border-radius:0px 0px 3px 3px;} #favor ul.pager span{padding:2px 7px 8px; zoom:1;} .filter_pager .populated{float:right; padding-top:5px; padding-right:5px;} .populated{color:#333; font-size:11px; text-align:right;} .populated strong{color:#bf3f40;} /***/ .dvd_menu, .scene_menu { width:680px; border-bottom:2px solid #ba3132; height:21px; /*background:transparent url(images/bg_pager.gif) repeat-x scroll center bottom; */ margin-top:30px; overflow:hidden; position:relative; } .scene_menu dt { float: left; height:21px; text-align:center; font-size:10px; font-family: Trebuchet MS; font-weight:bold; cursor:pointer; padding: 0px 8px; position:relative; width:auto; } .scene_menu dt span { display:block; float:left; font-weight:bold; height:18px; padding:3px 0px 0px 0px; position:relative; text-align:center; text-transform:uppercase; white-space:nowrap; width:54px; z-index:3; } .scene_menu dt span p{ margin:0px; padding:0px; } .dvd_menu dt.active span, .scene_menu dt.active span{ display:block; color:#fff; float:left;} .dvd_menu dt.active, .scene_menu dt.active { height:21px; /*background:url(images/content/scene/decor_bg.gif) repeat-x;*/ background-color:#BA3132; border-radius:3px 3px 0 0; -moz-border-radius:3px 3px 0 0; -webkit-border-radius:3px 3px 0 0; } .dvd_menu dt {float: left; height:21px; text-align:center; font-size:12px; font-family: Tahoma; font-weight:normal; cursor:pointer; padding: 0px 7px 0 8px; position:relative;} /************************************************/ #js_thumbs_view { height:407px; overflow:auto; position:relative; border-bottom: 2px solid #BA3132; border-top: 2px solid #BA3132; } #js_thumbs_view, #js_thumbs_view #content { width:680px; padding:20px 0; } #scene_thumbs img{border:1px solid #fff; float:left; display:block; margin:0px; padding:0px;} #overHead {width: 696px; position: absolute; top: 0px; left:0px; background-color: #ffffff; z-index: 10; opacity:0.5; height:407px} *html #overHead {filter:alpha(opacity=50);} /*.items_block{border-bottom:2px solid #BA3132;}*/ /*SortForm*/ .content #sortForm input{left:-1000em; position:absolute; vertical-align:middle;} .filter_pager #sortForm label, .content #sortForm label{cursor:pointer; margin-left:2px; position:relative; color:#333333; float:left; padding:3px 5px 0 0;} .filter_pager #sortForm a.checked, .content #sortForm label.checked{font-weight:bold;} .filter_pager #sortForm div, .content #sortForm div{position:relative; color:#333; font-size:11px;} .filter_pager #sortForm a, .content #sortForm a{color:#ba3132;text-decoration:none;} .filter_pager #sortForm a:hover, .content #sortForm a:hover {color:#fb4c1f;text-decoration:none;} .filter_pager #sortForm .sort_by{width:auto; padding:3px 10px 0 0; float:left;} .filter_pager #sortForm .sbrWrap {float:left; width:30px;} .filter_pager .row {clear:both;} .float_left {float:left;} #view_gal .filter_pager {height:auto;} #view_gal .right {float:right; padding-right:10px;} #view_gal .right a {margin-right:15px;} #view_gal table td {padding:5px 10px;} #view_gal .contenttitle h1 {padding:5px 0;} #view_gal .rate_holder {padding:10px 0;} #view_gal .rate_holder .userSelected {background:url(images/rate_bg.gif) center no-repeat;} #view_gal .rate_holder .rating {cursor:pointer;} #view_gal .rate_holder .rating img {padding:3px;} #view_gal .rate_holder .right img {margin-bottom:-3px;} .pic_holder {position:relative;} .pic_holder input {position:absolute; top:0; left:0;} .pic_holder img {display:block; width:148px; height:109px;} #view_gal .body_out {width:690px;} /*View Photo*/ .rate_holder .slide_form {float:right; padding:10px 10px 0 0; } .rate_holder .slide_form dl {width:40px; float:left;} .rate_holder .slide_form span.label {float:left; padding-top:3px;} .rate_holder .slide_form span {margin-left:20px; vertical-align:middle; float:left;} .rate_holder .slide_form span input {margin-right:5px; padding:0; position:relative;} .rate_holder .slide_form img, .body_photo .slide_form label, .body_photo .slide_form input {vertical-align:middle;} .rate_holder .slide_form label {margin-right:5px;} .rate_holder .slide_form img.checkbox_img {height:14px; left:0px; position:relative; top:3px; width:15px;} #view_photo_form .rating {color:#333; font-size:11px; padding-top:14px;} #view_photo_form .rating span.label {position:relative; top:-4px;} #view_photo_form .photo_size {text-align:center; clear:both; position:relative; top:-20px;} #view_photo_form .rating #voteStars {padding-top:2px;} #voteStars img {padding:3px 3px 1px; cursor:pointer;} #view_photo_form .contenttitle {padding:0 10px;} #view_photo_form .view_pic {margin:auto; padding:0 40px 0 35px; position:relative; min-height:300px; text-align:center;} #view_photo_form #mod_bi_main_picture {border:1px solid #b04848;} #view_photo_form .right {float:right; padding-right:10px;} #view_photo_form .infox span {color:#333;} #view_photo_form .infox strong {color:#666; font-weight:normal;} #view_photo_form .infox {left:0px; padding:5px 140px 5px 20px; text-align:center; top:0px;} #view_photo_form .infox .right {float:none; position:absolute; right:50px;} #view_photo_form .unlogged .infox {left:0px; padding:5px 20px; text-align:center;} #view_photo_form .unlogged .infox .right {float:right; position:static;} #view_photo_form #prevbtn{position:absolute; top:50%; left:0px;} #view_photo_form .unlogged #prevbtn {top:46px;} #view_photo_form #prevbtn strong {font-size:14px; color:#ba3132; font-weight:normal; display:block;} #view_photo_form #nextbtn strong {font-size:14px; color:#ba3132; font-weight:normal; display:block; padding-left:7px;} #view_photo_form #nextbtn{position:absolute; top:50%; right:2px;} #view_photo_form .unlogged #nextbtn {top:46px;} #view_photo_form .razr_span {text-align:center; color:#333;} #view_photo_form .razr_span strong {padding-left:0 10px;} #view_photo_form .razr_span a {color:#b04848; text-decoration:underline; font-size:11px; margin:0 20px;} #view_photo_form .ret_to_thumbs {padding-left:20px; background:url(images/content/gallery/back_to_thumbs.gif) top left no-repeat; height:14px; re} #view_photo_form .ret_to_thumbs a {color:#ba3132; text-decoration:none;} #view_photo_form .contenttitle h1 {padding:5px 0;} #view_photo_form .rate_holder {padding:10px 0;} #view_photo_form #contname_title strong {color:#666; font-weight:normal;} #view_photo_form .btn_lbl {color:#ba3132; padding-left:5px; cursor:pointer;} #view_photo_form #fvrLinkAddRemove input {margin-bottom:-3px;} #thumbs {margin:auto; padding:25px 0; width:750px;} #thumbs .item {float:left; text-align:center; width:150px; overflow:hidden;} #thumbs #current_thumb img {border:3px solid #b04848;} .top_block div.crumb {margin:0; padding:5px 0 5px 10px;} /*Bookmarks*/ #FavDelSelForm {border-bottom:2px solid #BA3132; clear:both; width:680px;} #favor .filter_pager #sortForm .sort_by{float:left;} .filter_pager #sortForm .sbrWrap {width:39px;} #FavDelSelDiv1 {float:right;} #FavDelSelDiv1 a {text-decoration:none; color:#ba3132;} #FavDelSelForm .item {text-align:center; width:150px; overflow:hidden;} /*#FavDelSelForm .item_title a {color:#ba3132; font-size:14px; margin-left:5px;}*/ #FavDelSelForm .item_title span strong {font-weight:normal; color:#333;} #FavDelSelForm td {padding:10px;} /* join page */ #infoDVD{text-align:center; font-family:Arial,Helvetica,sans-serif; font-size:1.4em; color:#4d4d4d; font-weight:bold; position:absolute; top:100px; width:100%;} #infoDVD li{display:inline;} #infoDVD span{padding:1px 4px; background:#e91a6c; color:#fff; margin:0px 5px;} #infoDVD strong, #join_page .dots strong{color:#e33d6f;} #join_page{color:#616161; width:424px; min-height:477px; _height:477px; margin:0px auto; border:1px solid #e0e0e1; padding:2px 164px 20px 188px;} .page_straight_join{ background:url(images/join/join.png) bottom center no-repeat #FEFEFE;} .page_gay_join{background:url(images/join/join_gay.png) bottom center no-repeat #FEFEFE;} .page_shemale_join{background:url(images/join/join_shemale.png) bottom center no-repeat #FEFEFE;} #join_page h2{color:#616161; text-align:center; padding-bottom:12px; font-size:1.6em;} #join_page .dots{border:1px dotted #d8d8d8; background:#fbfbfb; text-align:center; color:#898989; font-size:1.4em; padding:10px 0px; margin-bottom:18px;} #join_page .dots span{color:#e33d6f;} #join_page .dots h3{color:#e33d6f; font-size:1.4em; padding-top:5px;} #join_page .secure{background:url(images/join/secure.gif) top left no-repeat; margin:0px 0px 0px 60px; margin-bottom:25px; color:#999; padding:1px 0px 0px 23px; height:18px; font-size:1.4em;} #join_page label{float:left; width:132px; padding:0px 10px 0px 0px; text-align:right; font-size:11px; margin-top:5px;} #join_page .radio label{float:none; text-align:left; vertical-align:middle; padding-top:8px;} #join_page .radio p{padding:5px 0px;} #join_page .radio{float:left; width:222px;} #join_page .radio img, #join_page .radio input{margin-right:10px; vertical-align:middle;} #join_page .fields{padding:6px 0px; position:relative;} #join_page .join_button{margin:6px 0px 0px 142px; background-image:url(images/background/px30.png);background-repear:repeat-x;padding:3px 0px 7px; background-color:#DD225A; text-align:center; font-size:14px; font-weight:bold; border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px; width:223px !important; height:auto !important; position:relative; top:-5px; cursor:pointer;} #join_page dl{color:#fff; width:222px; float:left;} #join_page .field{padding:2px 8px 8px; background:url(images/background/i_bg.png) repeat-x; border:1px solid #e1e1e1; width:206px; color:#666; font-size:1em;} #join_page .join_error{display:block; clear:both; padding:0px 0px 0px 100px; color:#ff0000;} #join_page .footer p.copy{padding-left:111px} #join_page .footer div.info{padding-left:111px} #join_page .footer .powered_list{padding-right:111px;} .header .dvds_online {position:absolute;top:35px;left:570px;font-weight:bold;text-transform:uppercase;font-size:1.4em;line-height:14px; white-space:nowrap;} .header .dvds_online span {font-size:2.6em;line-height:28px;color:#e33d6f;float:left;padding-right:2px;} .header .dvds_online p.img {position:absolute;top:-10px;left:-71px; width:68px; height:45px;} .join .footer{height:185px; width:750px;} .join #logo{/*padding-left:90px;*/ background: url("images/logo.png") no-repeat scroll 90px 0 transparent; width:420px;} .join .header {height:128px;} .join .footer p.copy, .join .footer div.info{padding-left:0px;} /* - join page - */ /*REVIEW BLOCK*/ .scene_info_reviews .reviewsBox { width:680px; margin-bottom:15px;} .dvd_info_reviews .reviewsBox { width:660px; margin-bottom:15px; padding-right:25px;} .reviewsBox {clear:both; padding-bottom:0;} .reviewsButtons {padding:5px 0px 5px 5px; /*background:#FFF;*/ margin-bottom:1px; text-align:right;} .reviewsButtons span {z-index:151; margin-right:5px; padding-right:10px; font-size:11px;} /*.reviewsButtons span.opened {background:url(images/content/gallery/arrow_add.gif) no-repeat right 4px;} .reviewsButtons span.closed {background:url(images/content/gallery/arrow_rem.gif) no-repeat right 4px;}*/ .reviewsButtons span.fav_add {padding-left:4px;} .reviewsButtons span.fav_add img {position:relative;top:2px;} .reviewsBox .reviewsForm{ float:right; padding-right:5px; width:478px; padding-top:5px; padding-bottom:6px; padding-left:5px; border:1px solid #f2f2f2; position:relative; margin-bottom:7px; } .reviewsBox .reviewsForm textarea, .content .reviewsBox .reviewedit textarea{ width:420px; height:55px; border:1px solid #e6e6e6; background-color:#f2f2f2; margin-left:10px; resize:none;} .reviewsBox .reviewsForm label{vertical-align:top;} .reviewsBox .edit_form {border:1px solid #f2f2f2; padding:5px 8px;} .reviewsBox .edit_form textarea { width:99%; border:1px solid #e6e6e6; background-color:#f2f2f2; font-family:tahoma; font-size:0.9em;color:#000; resize:none;} .reviewsBody {float:right; margin-bottom:15px; width:478px;} .scene_info_reviews .reviewsBody {width:680px;} .reviewTitle {position:relative; padding:2px 9px; background:#f7f7f7; color:#414141; border:1px solid #f2f2f2; border-bottom:none; min-height:17px;} .reviewActions {/*position:absolute; right:5px; top:2px;*/} .reviewActions span{ cursor:pointer;} .reviewActions span img{position:relative; top:2px;} .reviewTitle * {display:inline;} .reviewTitle h5{font-size:1em; color:#000;} .reviewActions strong {font-weight:normal;} .bangs{position:absolute; right:10px; top:0;} .bangs img { position:relative; top:2px; cursor:pointer;} .bangs .active{opacity:.4; cursor:default} .reviewOpts {font-size:0.92em; color:#000;} .reviewOpts span {} .reviewText p {border:1px solid #f2f2f2; margin:0; color:#666; font-size:.9em; display:block; padding:10px; overflow:hidden;} .content .reviewText p {padding:5px 9px;} .reviewText textarea { resize:none;} .reviewOpts span, .reviewsButtons span {color:#ba3132; cursor:pointer; border:1px solid; padding-left:5px; padding-right:3px; padding-bottom:1px;} .sub_review{ display:block; float:right; margin-top:5px; margin-right:5px; border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px; padding:0px; text-align:center; height:17px; width:55px; color: #666666; font-size:11px; font-weight:bold; background-color:#EFEFEF; cursor:pointer;} #content_box .view, .reviewsBox .view, .filter_pager .float_left #FavDelSelDiv .view, .scene_view .view {margin-right:5px; margin-top:-2px; margin-bottom:-2px;} .reviewsBox .add {margin:-3px 5px;} .reviewsBox .sep {margin:-3px 2px;} .reviewsBox .info {margin-right:5px; margin-bottom:-4px;} a.add_favor{color:#ba3132;} /*Scene BSI*/ .scene_view{width:680px; border-bottom:2px solid #BA3132;} .scene_view div.title{padding:8px 0px 8px 4px; border-top:1px solid #BA3132;} .scene_view div.title a.red{float:left; font-size:14px; p} .scene_view div.title span.times{color:#666; font-size:11px; float:left; font-weight:normal; padding:3px 0 0 20px; z-index:151;} .scene_view div.title div.right_fav{color:#ba3132; font-size:11px; float:right; cursor:pointer; border:1px solid; padding-left:5px; padding-right:3px;} .scene_view div.scenebox{/*display:block; float:left;*/ padding:8px 7px 0 0; margin:0px; position:relative; display:inline;} .scene_view div.scenebox_last{/*display:block; float:left;*/ padding:8px 0px 0 0; margin:0px; position:relative; display:inline;} .scene_view div.scenebox input{position:absolute; bottom:3px; left:1px;} .scene_view div.scenebox img, .scene_view div.scenebox_last img {border: 1px solid #d0d0d0;} .scene_view a.view_gal_btn, .scene_view a.downloads {float:right; margin-top:-20px;} .scene_info{line-height:22px;} .thumb_items{padding:9px;} .synopsis{padding-bottom:9px;} /* Cancel Subscription Page */ .unsubscript .f_left { float:left; } .unsubscript .f_right { float:right;} .unsubscript .c_subscr { margin-top:15px; width:339px; } .unsubscript label { font-weight:bold;} .unsubscript input.account { width:191px; height:22px; padding:0px; margin:5px 0px 2px 0pt; } .unsubscript dl.sel_text { color:#333333; width:191px; height:22px;} .unsubscript textarea.text {background:#f5f5f5; border:1px solid #d7d7d7; width:191px; height:141px;} .unsubscript .password , .unsubscript .reason , .unsubscript .comment , .unsubscript .submit {padding-bottom:5px;} .unsubscript .comment { padding-bottom:2px; } .unsubscript .submit { float:right; width:193px; height:22px; font-size:0px; text-indent:-3000px; overflow:hidden; } .unsubscript .submit input { color:#FFFFFF; display:block; padding-top:5px; text-align:center; padding-top:0px; } .unsubscript dl.sbrWrap dd { margin-left:-1px;} /* Splash */ #splash {position:fixed; width:100%; height:100%; left:0; top:0; background:#111; opacity:.8; z-index:999999;} #splash_out {position:fixed; width:100%; height:100%; left:0; top:0; z-index:1000000;} #splash_in, #splash_in_gay, #splash_in_shemale {width:642px; height:390px; padding:6px 0 5px 0; background:url(images/bg_splash_straight.jpg) left 6px no-repeat; position:absolute;; top:50%; left:50%; margin:-198px 0 0 -321px; opacity:1; z-index:1000001;} #splash_in_gay{background:url(images/bg_splash_gay.jpg) left 6px no-repeat;} #splash_in_shemale{background:url(images/bg_splash_shemale.jpg) left 6px no-repeat;} #splash_in div.splash_top, #splash_in_gay div.splash_top_gay, #splash_in_shemale div.splash_top_shemale {position:absolute; top:0; left:0; width:642px; height:6px; background:url(images/bg_splash_top_straight.gif) no-repeat; z-index:1000001; line-height:0px; font-size:0px;} #splash_in_gay div.splash_top_gay{background:url(images/bg_splash_top_gay.gif) no-repeat;} #splash_in_shemale div.splash_top_shemale{background:url(images/bg_splash_top_shemale.gif) no-repeat;} #splash_in div.splash_bottom, #splash_in_gay div.splash_bottom_gay, #splash_in_shemale div.splash_bottom_shemale {position:absolute; bottom:0; left:0; width:642px; height:5px; background:url(images/bg_splash_bottom_straight.gif) no-repeat; z-index:1000001; line-height:0px; font-size:0px;} #splash_in_gay div.splash_bottom_gay{background:url(images/bg_splash_bottom_gay.gif) no-repeat;} #splash_in_shemale div.splash_bottom_shemale{background:url(images/bg_splash_bottom_shemale.gif) no-repeat;} #splash_text {position:relative; z-index:1000001; width:642px; height:390px; overflow:hidden;} #splash_text .plus18 {position:absolute; top:281px; left:6px; font-size:5.45em; font-family:'Trebuchet MS', Tahoma, Arial, Verdana, Sans-Serif; color:#fff;} #splash_text .splash_warning {position:absolute; top:47px; left:332px; font-size:5.45em; font-family:'Trebuchet MS', Tahoma, Arial, Verdana, Sans-Serif; color:#fff !important; height:70px; text-transform:uppercase; line-height:1em;} #splash_text .splash_explicit_content {position:absolute; top:130px; left:336px; font-size:1.909em; font-family:'Trebuchet MS', Tahoma, Arial, Verdana, Sans-Serif; color:#ba3132; height:55px; overflow:hidden; text-transform:uppercase;} #splash_text p {color:#666; overflow:hidden; height:130px; width:255px; line-height:18px; position:absolute; top:173px; left:343px; font-size:1.09em;} #splash_text p strong {color:#ba3132;} #splash_text .buttons {position:absolute; top:306px; left:383px;} #splash_text .buttons img {margin-right:4px; cursor:pointer;} #splash_text .buttons a img {margin:0;} #splash_text li {padding:0 2px 0 0; display:inline;} #splash_text ul {bottom:10px; position:absolute; left:295px; width:340px; text-align:center; font-size:0.91em; color:#666;} #terms h1{padding:10px 0px;} #terms h6{display:inline; color:#ba3132; font-size:11px;} #terms p{padding-bottom:5px;} /*select*/ select.selReplaced {width:1px; position:absolute; left:-999em; float:none;} dl.selectboxs {margin:0; padding:0; border:none; position:relative; overflow:visible; line-height:1.2em; background:url(images/background/input_bg.gif) left top repeat-x; border: 1px solid #e1e1e1; zoom:1;} dl.selectboxs * {position:static; float:none; display:block; width:auto; margin:0; padding:0; border:none;} #acc_set dl.selectboxs dd {z-index:1001;} dl.selectboxs dt {cursor:default; color:#666; padding:7px 7px 8px; background:url(images/other/arrow.gif) right top no-repeat; height:1.1em; overflow:hidden;} dl.selectboxs dd {position:absolute; z-index:101; left:0; top:100%; margin:0; padding:0; width:100%; overflow:auto; max-height:15em; border:1px solid #e1e1e1; border-left:none; border-top:none; background:#ebebeb; white-space:nowrap; font-size:.9em;} dl.selectboxs dd ul {width:100%; overflow:hidden;} dl.selectboxs dd li {padding:4px 3px; cursor:default; color:#333; height:1.1em; overflow:hidden;} dl.selectboxs dd li.sbrSelected {background:#eee;} dl.selectboxs dd li:hover, dl.sbrWrap dd li.hover {background:#e1e2e3;} /*dl.sbrWrap .sbrOptsCol {display:none;} dl.sbrWrap .sbrOptsExp *{display:block;}*/ dl.selectboxs .sbrFocused {background-image:url(images/other/arrow.gif)} /* Report a Problem */ .content #popup_message td { text-align:left;} #popup_overlay {z-index:999;} #popup_message {border:1px solid #d1d1d1; padding:3px; width:367px; font-size:11px; background:url(images/report_problem/bg_browseblock.gif) repeat-x 0 -130px; } #popup_message select {width:217px;} #popup_message table textarea {background:#fdfdfd url(images/report_problem/textarea_bg.gif) repeat-x 0 0; border:1px inset #f3f3f3; width:215px; margin-left:2px; resize:none;} .popup_message_title {background:url(en/images/report_problem_title.gif) no-repeat; height:37px; position:relative;} .popup_message_title a {display:block; float:right; margin:9px; display:block} #errorWindowReport_holder {width:367px;/*height:264px;*/z-index:2000;padding:3px;float: left;} #popup_window #errorWindowReport_holder .formFields span input.text {height:18px;width:225px;background:#fdfdfd url(images/report_problem/textarea_bg.gif) repeat-x 0 0; border:1px inset #f3f3f3;padding:3px 3px 1px; font-size:12px;} #popup_window #errorWindowReport_holder { background:#fefefe url(images/report_problem/bg_errorWindowReport.gif) repeat-x 0 0; border:1px solid #d4d4d4; position:relative;} #popup_window #errorWindowReport_holder .title { height:25px; width:345px; padding:10px 5px 0 15px; border:1px solid #232424; background:url(images/report_problem/bg_errorWindowReport_title.gif) no-repeat 0 0; position:relative;} #popup_window #errorWindowReport_holder .title img {vertical-align:top; float:left;} #popup_window #errorWindowReport_holder .title a.close { width:20px; height:18px; padding:0; margin:0; display:block; float:right; margin-top:-3px;} #popup_window #errorWindowReport_holder .formFields {padding:15px 14px 15px 22px;} #popup_window #errorWindowReport_holder .formFields label {display:block; float:left; padding-top:3px; width:85px; text-align:right;color:#434343;} #popup_window #errorWindowReport_holder .formFields span { float:right; position:relative; width:234px;} #popup_window #errorWindowReport_holder .formFields span dl.sbrWrap dt { width:220px; background:transparent url(images/report_problem/arrow.gif) no-repeat scroll right top;padding:6px 7px 7px;} #popup_window #errorWindowReport_holder .formFields span dl.sbrWrap dd {z-index:2000;} #popup_window #errorWindowReport_holder .formFields span dl.sbrWrap dd ul {padding-bottom:5px; z-index:2000;} #popup_window #errorWindowReport_holder .clear {clear:both; font-size:1px; height:18px; width:auto;} #popup_window #errorWindowReport_holder .formFields span textarea { height:110px; width:220px; padding:4px; font-size:1.3em; color:#000; background:#ccc url(images/report_problem/bg_errorWindowReport_textarea.gif) repeat-x scroll left top;border-color:#C6C6C6; border-style:solid none none solid; border-width:1px medium medium 1px; resize:none;} #popup_window #errorWindowReport_holder dl.selectboxs dd{font-size:1.1em;} .reviewsButtons span , .footer p , .sidebar , .frames .aboveframe_right , .frames .download_links , .frames .frame_middle , .frames .underframe , .gallerydvd div.dvd_info , div.series dl.sbrWrap {z-index:1;} div.language_bar , .footer .powered_list {z-index:10;} #navigator {position:relative;} .footer p.copy {width:460px;} #errorWindowReport_holder dl.sbrWrap {display:block; float:right;} #errorWindowReport_holder dl.selReplaced {display:block;} .report_btn_bottom {clear: both;float: left; margin-top: 2px; position: relative;} .report_btn_bottom img {display: block; height: 18px; width: 112px; z-index: 998;} .report_btn_navigator {position:absolute;right:4px;top:4px;} #js_reportForm .clearfix{position:relative;} #js_reportForm .select_box{z-index:2;} /* end Report a Problem */ .report_send{background:url(images/background/report_submit.gif) repeat-x scroll 0 0 transparent; border:1px solid #000000; color:#FFFFFF; display:block; float:left; font-family:"Trebuchet MS"; font-size:12px; font-weight:bold; padding:1px 7px 0px; text-transform:uppercase; text-decoration:none;} a.report_send:hover{text-decoration:none;} /* end Report a Problem */ /*Buttons*/ a.txtbutton{display:block;background-color:#cc3637;font-weight:bold;text-align:center;color:#fff;font-family:"Trebuchet Ms";text-decoration:none;-moz-border-radius:3px;border-radius:3px; text-transform:uppercase;} .px18{behavior:url(./PIE.htc);zoom:1;font-size:10px;background-image:url(images/background/px18.png);background-repear:repeat-x;padding:1px 0 2px;} .px22{behavior:url(./PIE.htc);zoom:1;font-size:12px;background-image:url(images/background/px22.png);background-repear:repeat-x;padding:3px 0 2px;} .px28{behavior:url(./PIE.htc);zoom:1;font-size:14px;background-image:url(images/background/px28.png);background-repear:repeat-x;padding:4px 0 4px;} .px30f12{behavior:url(./PIE.htc);zoom:1;font-size:12px;background-image:url(images/background/px30.png);background-repear:repeat-x;padding:5px 0 3px;} .px40{behavior:url(./PIE.htc);zoom:1;font-size:18px;background-image:url(images/background/px40.png);background-repear:repeat-x;padding:7px 0;} /* end Buttons*/ /* Languages */ div.language_bar{position:absolute; top:5px; background:url(images/background/bg_flag.gif) no-repeat top left; right:0; float:left; z-index:1000;} div.language_bar ul{list-style-type:none;} div.language_bar li{float:left; position:relative; } div.language_bar ul li img{cursor:pointer;} div.language_bar a{ margin:0 3px; display:block; width:16px; height:11px; padding:8px 2px; cursor:pointer; background:center bottom no-repeat;} div.language_bar span{ margin:0 3px; display:block; width:16px; height:11px; padding:4px 1px; background:left bottom no-repeat;} div.language_bar a:hover{background-image:url(images/header/lang_bar/arrow.gif);} div.language_bar ul li a:hover span{display:block;} div#lang_list.hide{display:none} div#lang_list.show{display:block} div#lang_list{border:1px solid #e4e4e4; color:#666; position:absolute; right:0px; top:26px; width:194px; z-index:1000;} div#lang_list ul li{border-bottom:1px solid #e4e4e4; float:left; background:url(images/background/main_list_block.jpg) repeat-x scroll 0%;} div#lang_list ul li a{margin:0px; display:block; width:87px; height:11px; padding:8px 5px; cursor:pointer; color:#666} div#lang_list ul li a:hover{text-decoration:underline;} div#lang_list ul li img{float:left; padding:2px 3px 0 0;} .total_text {color:#B5B5B5; float:left; font-size:14px; font-weight:bold; letter-spacing:-1px; line-height:12px; margin-top:33px; width:60px;} .storage{font-size:0; height:0;} .triangle_up {border-bottom:20px solid; border-left: 12px solid transparent; border-right: 12px solid transparent; width:0; margin-left:22px; border-bottom-color: #FFFFFF; position:relative;} .triangle_down { border-top:21px solid; border-left: 12px solid transparent; border-right: 12px solid transparent; width:0; margin-left:22px; position:absolute; bottom:12px; border-top-color:#ffffff} .crumb_arrow{ font-size:9px;} #ratings { height:28px;} .new_rating {position:relative; width:50px; height:10px; display:inline-block; font-size:0; line-height:0; vertical-align:middle} .new_rating span {position:relative; margin:1px 0 0 -9px; width:50px;} .new_rating b {position:absolute; width:8px; height:8px; top:-1px; left:9px; border:1px solid transparent; cursor:pointer;} .new_rating b:after, .new_rating .after {display:inline-block; width:8px; height:8px; content:"";} /*IE7 FIX*/ .new_rating b {display:inline-block; width:8px; height:8px; content:""; //z-index: expression(runtimeStyle.zIndex = 1, insertAdjacentHTML('beforeEnd', ''));} .new_rating b:after, .new_rating .after, .new_rating b:hover b:after {background:#b4b4b4;} /*IE7 FIX*/ .new_rating b {background:#b4b4b4; //z-index: expression(runtimeStyle.zIndex = 1, insertAdjacentHTML('beforeEnd', ''));} .new_rating b:hover b {border-color:transparent} .new_rating span b:hover, .new_rating .userRating {border-color:#fff229} .new_rating b.active:after, .new_rating .active > .after, .new_rating span b:hover:after, .new_rating span b:hover > .after {background:#f28e00;} /*IE7 FIX*/ .new_rating b.active,.new_rating span b:hover {background:#f28e00; //z-index: expression(runtimeStyle.zIndex = 1, insertAdjacentHTML('beforeEnd', ''));} .big_rating {width:90px; height:12px; left:-15px;} .big_rating span {margin:1px 0 0 -15px; width:60px;} .big_rating b {width:10px; height:10px; left:14px; line-height:0;} .big_rating b:after, .big_rating .after {width:10px; height:10px;} #inp_login {position:relative;} #inp_password {position:relative;} #cscene, #csize {position:relative;} .rounded {position:relative;} .join #logo {background-position: 0 50%;} .join #header {width: 742px;} .join .footer_bg {margin-bottom: 0;margin-left: auto;margin-right: auto;margin-top: 0; width: 755px;} .join #footer {padding-left: 0 !important;} /*Изменения стилей для новой инициализации плеера*/ ul.pager{width:376px;} .report_btn_navigator {position:absolute;right:4px;} .frames .download_links ul li.active_format{ background-color: #BA3132;} #playerholder {width:680px; height:553px;} .format a { text-decoration:none;} .format { cursor:pointer;} .frames .download_links ul li span.player {color:#fff; font-weight:bold; font-size:10px;} ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=lightbox.css Content-Type: text/css; charset=UTF-8; name=lightbox.css Content-Location: http://cdn-small.content.adultcentro.com//JS/lightbox2.02/css/lightbox.css Content-Transfer-Encoding: 8bit #lightbox{ position: absolute; top: 40px; left: 0; width: 100%; z-index: 1000; text-align: center; line-height: 0; } #lightbox a img{ border: none; } #outerImageContainer{ position: relative; background-color: #fff; width: 250px; height: 250px; margin: 0 auto; } #imageContainer{ padding: 10px; } #loading{ position: absolute; top: 40%; left: 0%; height: 25%; width: 100%; text-align: center; line-height: 0; } #hoverNav{ position: absolute; top: 0; left: 0; height: 100%; width: 100%; z-index: 10; } #imageContainer>#hoverNav{ left: 0;} #hoverNav a{ outline: none;} #prevLink, #nextLink{ width: 49%; height: 100%; background: transparent url(../images/blank.gif) no-repeat; /* Trick IE into showing hover */ display: block; } #prevLink { left: 0; float: left;} #nextLink { right: 0; float: right;} #prevLink:hover, #prevLink:visited:hover { background: url(../images/prevlabel.gif) left 15% no-repeat; } #nextLink:hover, #nextLink:visited:hover { background: url(../images/nextlabel.gif) right 15% no-repeat; } #imageDataContainer{ font: 10px Verdana, Helvetica, sans-serif; background-color: #fff; margin: 0 auto; line-height: 1.4em; } #imageData{ padding:0 10px; } #imageData #imageDetails{ width: 70%; float: left; text-align: left; } #imageData #caption{ font-weight: bold; } #imageData #numberDisplay{ display: block; clear: left; padding-bottom: 1.0em; } #imageData #bottomNavClose{ width: 66px; float: right; padding-bottom: 0.7em; } #overlay{ position: absolute; top: 0; left: 0; z-index: 90; width: 100%; height: 500px; background-color: #000; filter:alpha(opacity=60); -moz-opacity: 0.6; opacity: 0.6; } .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } * html>body .clearfix { display: inline-block; width: 100%; } * html .clearfix { /* Hides from IE-mac \*/ height: 1%; /* End hide from IE-mac */ } ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=style_en.css Content-Type: text/css; charset=UTF-8; name=style_en.css Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/style_en.css Content-Transfer-Encoding: 8bit #dvdday {background:transparent url(images/dvdofday.png) no-repeat scroll 0%;} .it_no_show {display:none;} .filterblock {width:345px;padding:0 0 7px 0;} .filterblock label {width:105px;} ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=favicon.ico Content-Type: image/x-icon; name=favicon.ico Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/images/favicon.ico Content-Transfer-Encoding: Base64 AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABML AAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRkZGXxoZ2bOhYKA43x7 edk3NTW3AAAAqAAAAJIAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHBwMqKo qemjyNn/nMfd/6zO3/+3zdz/v8jS/7e5vfhMS0q+AAAAqAAAAFEAAAACAAAAAAAA AAAAAAAAqqqqTcTX3/+72uD/i8bg/5bF3/+ex9//p8Xd/6/F3P/R2OD/wc/Z/4uL idkICAipAAAAOwAAAAAAAAAAuLi4OM/a4v/E3uL/tdTi/4bJ4f+EwOH/ksXh/5TE 3v+av9//vcrg/8zX4v/Azd7/eXl5zgAAAKgAAAAOx8fHD9DQ19PK2+X/u9bl/7TV 5P+y1OT/lMbk/6TL4/+pzOH/ss/j/8TR5P/I0+T/y9Pl/8jO3P8yMjK0AAAAUczM zEvE2ef/wNjm/7TX5/+82+f/kcvm/1Ss5f9IpeL/cK/g/6nK5f/Q2eb/ztPl/9bU 5f/a0+P/nJuc2gAAAH/C0dmjoNPq/6PT6v+q2Or/mM7p/1Cm5v98q8br1dbWhLfL 3rRrpeL/wc/o/93Y6P/h1ef/6dbo/8O/we4dHR2jptLm0JjS7f+Y0u3/oNfs/2Oz 6/9frej/gYGBybS0tFDY2NhwtsDi37O45//o2un/59bm/+3X4v/Z0NH7KioqmqvU 6biQ0O//ks/v/5vW7/9Xp+n/bq/t/3BwcMIAAAB/nJycYNG/u+nOvdP/69vo/+vX 4f/v19r/18zH9Dg4OHfb4OGIfM7y/4zO8v+R0fL/jMrx/1eF7f+AndHugoSGy7Sk rOPuuHf/79a+/+/c4v/v2dj/7dXJ/8C9uOZoaGhC6urqaX/M9fWEzfX/i8v1/5HL 9P93pu//X3Dp/3mF5//Mmb//8Muh//Xirf/04MP/8uDW/+/cy/+pqam0WlpaJ+/v 7zzU5fGTfsr3/5DF9f+BtvX/hbj0/7e78v/Vqej/8cri//feyv/335f/9uKq//Xh xv/Y0cbq2dnZYwAAAAn09PQI9PT0cMjc87uKt/T/ibP1/6St9v/Ntfb/7bz0//PC 4v/41sL/+eOa//jjov/w38n49PT0eKenpywAAAAAAAAAAPj4+B74+Ph42N71p6Oq 9f+8qff/2LT2/+m59f/4vuL/+c64//njmv/158rV+Pj4eNvb20QAAAAAAAAAAAAA AAAAAAAA/Pz8Hvz8/HD8/Px44dn6sdq799zltPT4+MLi5/jh2cL7+fOF/Pz8eO/v 7zgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8I////PP///2n///94////eP// /3j///9w////S////w8AAAAAAAAAAAAAAAAAAAAA/A8AAPAHAADgAwAAwAEAAIAB AACAAQAAAAAAAAGAAAABgQAAAAEAAIABAACAAwAAwAcAAOAPAAD4HwAA//8AAA== ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/custom/logo.jpg Content-Transfer-Encoding: Base64 /9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/ 4QMpaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49 Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRh IHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29y ZSA1LjAtYzA2MCA2MS4xMzQ3NzcsIDIwMTAvMDIvMTItMTc6MzI6MDAgICAgICAg ICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8w Mi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0 PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1s bnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5z OnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3Vy Y2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgV2lu ZG93cyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2Q0JDRDZDMDNDNzMxMUUx OTM4M0NBNDAzODM5N0E2OCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2Q0JD RDZDMTNDNzMxMUUxOTM4M0NBNDAzODM5N0E2OCI+IDx4bXBNTTpEZXJpdmVkRnJv bSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjZDQkNENkJFM0M3MzExRTE5Mzgz Q0E0MDM4Mzk3QTY4IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjZDQkNENkJG M0M3MzExRTE5MzgzQ0E0MDM4Mzk3QTY4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8 L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+/+4ADkFk b2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwM 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 WbhwJChcMPvIS5Y9h0X1W+FVRqlLkiyVkVzZPw2fwmbi+Lw8+PkI17F6M4l1IPqJ STY++oyg4vDWCUZJ8hjP7u2vt5CF5zKxccHOrYkuobUr+akm5+FdhXKXJZOSmlzZ Hwe/tlZ6QI2GzkKfJIJDDL6FOEAXJCL6unursqpR4tHI2RfJneqsmRMvCiz8VNgy 1FEWUw4y+sEJIbcQUqIUegsD21KEnGSa5ojOKaaZUdi8e7O2bEnSdrNqyEt9IS44 p9txxYR1S0F/K2gX/wDNatxubLWlP5V6FFNEK03HiZfhMznsv5iYEjPRFY2cwh5h jGrue6YEdwpsv7K9VyrUOhv0r07KoQ2j0PK6/EwQslLcrUsF25sbC81sIkgac40o X9JCkVj7f9Nn6TTvfqh+ok+YVkvcbSGvvSo3+Zeo9r/m+DJdw/i+JB8tccx9izGi LWyLp+lpqp92/kX6fvIdt/jfqcvY2xoGU5j3fuKe0l5GKmlMNtYunxDgv3lj6UJT 09pvVm5vcNvCK/5L7CFFSldKT8GNb45P5Ix2/H4+JhOKweOdQ0uP4RbgkgAKcV3o SSL3ITpPSpbbZUyqzJ/M/PkRv3VsbMRXyry5nR8xW0IOW2pH3A2yE5DHuNpLtrKV HfOkoV/NWpJHq6+uqu13OM9D5P8AyWdwrThq8UUby4Y8xd/yFEW1Y54f+1o1t7r/ ABfH7zL27+T4Gpc/4tifxrNLiQXIz8d5g+kL71LfT3pWRXm9sli5eeTdv1mpmX+X rFBzN5/DyBeFk8Wtt9HoNlhF/wCi6qvS7o8RjJc1Iw7BZlKL5OJXONI8nanJ+NL/ AMhYmLx0u/To4VRzf9Ig1o3SVlLx0z/sp27cLVnrg63P7z2c5DdjtfrEY1lqGykd bur/AFih79TgT8Kq7ZBRpTfjxLN/Nysx0LzzJttvE8NYPBNAWhSIjSrelaGXNZ+K rmsWws17iUuqZq3kNNKXTA15X4hjQdxIItd6Mf6i673jnH4nO2cpfAPM9h2JUDAS wgeJbfeZ1ekoW2FkfAop2iXGSHc48IsziMy+eDdw4xVy23mITjafUXQnV/l1p3KX vRf5WUbdv2pLzOLiNoGbxPuGQEXdxOUhSgfSG3WlMOf20n4VVKeLEuqZZGOYPyZb 2N1vI8uDu39f/wBhnnEpTf5hHWfFk+7u7oql1fv58MZ/0Wqz9rHngqOa2gYHE+2X lIs9lslOmKPp7tDaGW/yIJ+NXRmnZJdEiuUcQXmX7AbpyO1PLu0jGOFnKT8hJhRn k/aaC1qW44n+UlCTY+gkGs86lO/jySLo2ONXDnkrHEHCMHfKsrNzEx+PHiKS2lTJ SXXH3QVlS1uBfRIt7STVm53Ht4SRXRTry2crbzmb4v5Gf8M+pTWPlmLkW03S3Jih XXUjsuUHWn1GrJRVsPUjGTrn6ByRtpza/Ks+Zj06UtTG8tjynoNLqhISE+wL1Jrl ElOtZ9BcnGbwbH5jdwtzOOsXDiKujcDzUgWPbHaQHv7am6xbKvE3nwNW6n8i8zJH NmJhcHInratIzOdQpKrdrEVl5tH9fWa2a83Y6RM2nFWerLTxLuCTs3iXd2QiJAn+ Maaggi4D77SEIUR6dF9XwqrcVqdkV4FlNmmDZyOJeL9ubzl5nKbyyTuttaEp1SEt PPPOgrW6txd1Gwt/0KlubnDCiiNFanlyZD204rjPmHwmOyAexgmtw5NlpIkQ5BTp Kwk6StAcBv8AeFTnH3astccEYy9uzCZW87Ih7h5JkvbwyS4jcjIOMT5OkuLjMocU gISgg2S2AE9nTtsatjDTX8q8CEpap/M/E33jbg/ZuG3Pjt4bX3ArKQ46HU92e5eS rvmlIuHWtOkjV2EV5l25k4uMlhm6qiKepPJs9YjUcfeTLr20M4yyhTrrsCUhttAK lKUplQCQB2kmrtu8WRfmiu5Zg/RmFeW7aW9MbueVkJsCTjcQYimnhJQpkOulSS2E trsVFNj81unxr2u7biucEk05ZPL7fTOM23yL9u8QxznsYo0+NXFyAet9ruktHu7/ AKRXasNDf9axeGUa7V+/B+pF50dQ1mNgLcISkZ1m5PYOqKl276bP0kd7zh+o63PW JyeU42nsY2O5KktOsPFhpJW4UNuAqKUjqbDr0qrtlkYXJsnvoOVTSIfl3weXxPH5 GUjORH5cx2Q2y8kocDZShCSpKuovoJF/RU+62xnb8vgiPb63Cvj1PXF+Wjq33yFi SseJayiZKUE9S2tsIJHsCkflrm8j+1W/y4Jbd/PNeZXeT+aOQdlbmfgfgkRzFK0r x05xD5DqCkXBUlYTqSq4Iq/abGm2Cep58eRTuN3ZXLGFgo+7eb+Qc3tF5GQwDEPD zHG2k5ANSEpLiVB1KUFxelR/V1so2NNc8qT1Lw4GW7d2ThhrgxeBN7Y9ner7uZlR MfGTBdCH3VhlJWpxv5dS1WvYXp3KrVXiKbeTmwnieZcOBZOcuaNtSYDGAwMhvKFT yXp77SrshLfVDaVjopRXZRt0Fqzdu2covXPh0NG+3Ka0x4nY8uWNly4k7dD8XwrE lIiQBcnvEJVqdcFwPl1BKR7jUO62LhBPPiS7fW+MmU3nJ1nbG/XnFRVKayiET47q FBNnB8jg6jtC0avjWvt8tdS48uBn3sdNmcc+JG4yyre+OSo5diqDqn15WeskKQA2 rvNNvUXChIru6/apeH4YRHbr3LMvrk1XzDT48DY8aTIQpbScgyClFr3U26B215na 1mx+n3G/f/QvUqnA2/NoRY2cdnZBjFpWuPoRMdbaUvSleopBV1AvWruVM5OOFnny KNjbGKeXgr/MHMW1s7mo8SApyXjcalemS2AEOPOW1KTqKTpSlNgfTc1dsdpKuLb+ plW83CnJJckT89ARgeB3cxPjOM/iU+LLMdQAdSySEMhQJsCQNXxrPbbqvwn9KwX1 1aauPiyTwGMdu3Z284DDSkNSw3Gs5b7amV6VdCewkGs+6nplF9C6iGYtdTF0brYd noxDcF/xzj4jCOVJCfElXdD5fXqNvdW3Pjky6fA2fzEqh7T2ps2EGO+ZiB2KhIVp 6oZbGrsPbprFtJ6pSfU1biOIpdCrTpTr/l8xm5I8TvGIOXkKfY1dENvKUzrKgPQv T9NWqS91ryK3B+2vUt3le3xiJsLPQH3GYcxDzcpDClgame70KWCq19JR83qqnexb aa4lu1aSaZkm9t3u7i5PysPAttS28nkjGgupBUXdRSyFJsbWNrj2VsqxGCz4IzWJ ym8GpeaPFy8Rj8DuCFpKWx+FzFqSFdAkuMHr7nBWXY2Lin6l+6rfBoxrOciZbcUH amHhrV4vHRPw/TYHW+7IIRpFj/hhsVsgoxcn1Znk3JJdDcPMPjRtrhnb+MjrKfAS 4scuJNipQjuhav0lXNYdpZm1yfiatxDFaSMz2vFnZby/bwfZK3nIGUjS3OpKu6ab QFn9FKiqtU7ErovyM8IP22iHwtsrj3e8mdj9x5Z/HZVsoVAabcabS+0QdYSXULut KvQD2Gpbjcyjxiso5TRGXNmrHy98QYzL4+K5uaUjJPvoEKGZEYuOOJOsANpa1W+W sv8AetafDgXrawT5krf3D/HG/Js3OYDcEbHZhS1ifocbcYW82dKy81qSttd0/MR7 7VyndWVrDWUSt28JvKfExTijPZbavLeOx0CYl5DuRTjJwirK48ltbndKUn0LH5yF WrZuHGdbz0MtClGZ9wV4R6wUAxLEtUdYhrbRII/VrdSVoB9ZSlSCfpFdjjPE4844 GU4fizcjHLUbeOdz4ycltLqUMpj9y2GlNKQlDY1r0BGqts93H23CMcL1MsdvLXqb ydbmnjyTvSDiGI+QOOegSi+h1LfeEqKbJt8ybWPWq9rufab4ZyWX068cS94hnJR8 bHaykhuXObQEyJTaC0lxQ6atBUvTf09azzab4cEWxTS48yNiYWZZyWSk5CciVGlL b8BHbbLaWGkJIKSSpWtSiblXSpTlFpJLGPtORi8ttmVq4h3I3yrkN34LcP4fIkPq ccZXG71stKCQppwd4nWlVvZWxbyLgoSjlepme2evUng2BJ0xm0z1tKdsO8IGlBUP SlKiogfGsDfHga0upQuZthu73wMLHNT0Q47ElL6lpb71ZUEKSAPmSkCyq07XcKpt 4zkovp9xJZMh/wCMN/8AfnD/AKZP9+tf/p/l+38DN/Q8/s/E7u1vLptLHzW5Gdel ZhtBBEcaWGjb76U3WoezUKhPuU39KwWQ2MVzeT6AgMw2YbLMJtDURpAQw02kJQlC RYJSkdgHqrzm23lmxJJYRm/NvGUXfDOKSZaoUqCt0peS2HCW3AkFBBKfzkg1q2u6 dWeGclF+3VmCHwnxPF2RkcnJVNVOlTGm2m3FNhvQ2lRUsCylX1HT9Fd3O8dqSxg5 RtlW85LFzFsj+MtpoxHizD0y2pHepQHD8iVjTYlP3qr21/tSzjPAnfVrWDFP+MF/ 9+cP+mT/AH62/wDp/l+38DJ/Q8/s/EueweCdkYDINTcqh7MS2lBTK5OkR0KHYruE jrb+UT7qpt7hOSwvlLq9nGPF8S88xbLG8tiyMGJZhh55h0PpQHCA2sKsE3T21krn peTROOUcTgbjH+AsZl4vj1T/ABz7bupTYa06EFNuilXrttuo5CGkqsTgjGM8xfxj 45Rh/ia56Mb3QCA4okj9Zq7A6dXZU/7D04I+1xyWrnrjH+PcdiI3j1QPAvuu6kth 3VrQE26qTbsqFVuklOGo6HG2wMbtvjE7XybgyuPUZIkh1sJDiH1klBRdXrt20na3 LK4HYwwsGLZzyqxZeSdd29lH4UJZKkRJDXiFNpPoDiVIJHvHxq5brqip0F84a4Q2 vszLpyUxbmTzgBTEmOpCGWSoWPdtC9lkdNRJ9lqrsvclhcicKkuJoHLW0Ym7tiz8 DIcLJklosSEp1lt1twLSsJJF+wjtquuel5JzjlGMbA8uETAbzw+al5dc5mBIS+Iy mEoSpaQe7JVrV9ldldlXS3OVjBVGnDNU5w2B/HG0o+I8YYPdTW5PfJbDhOhC06bE p+/VVVmllk4aiBwlxnH2PtnL42RM/Eo86QXXu9aCE6C0EKQU3WFAgV2y3U15HIQw Zju3ywYTJ5Z6TtiY/iY7qipMF1HiG0km/wCrIKVpT6gSbVbHcvxISp6HQ408t52x vPFZzIZZ6S/Ce71ppDIZQVaSPmUorJHX0Vye4ysHY04ONuTysycnnMjkIGacQmVJ efUh2N3li44VEakKTcdfVUlufI46S18PcCYLaO5GMvk5LmVybNxBWUBphlwgjX3d 1FSrdASenqqFl7awjsKsG/VnLhFjUhSfWCKAjRY5aWSOgI6igHVoBfbV6Ug/loAf aC1Nk/mqvQCyW+8aKPQbXoBIrfdtafQD0oBWmglxxVuqzc0A09CbdcK1K6mgPCsa 0Emx+FAeo0VLThUPSLUB6kxGnLK02UPSPTQCxWg0CkfZPW3toDxIjJdc1KF7dBQA 1FQ06FJHUdL+ygHZLSXGwlQuL3oBIzCGgoJFr2oBt6EyperSLntoBVR0qjd0RdII sKAIzCWEOaBa/WgGPw9rt09fX7aAflMJfQjUL260B4MRPhUs/mBV7UA5DjIZCtI6 qIuaAYdgILylgWN9XxoB6Yz3wSk9g6/GgGFY1sBBAF7dffegJEpnvmEpUL9QaAaR ECYy2gOiyLigFjMeH1FKASr00A93iyRdAoBXHFj5WwB7aAitwQXg6oddWon29tAT 6AKAKALdaAKADQAKAKASwvQCmgAC1ABoAAtQCWoBSKACKAALUAEUAlulAFulAFul AFqALdKAUC1AJagAigFIoBLdLUAW6UAoFqAS3WgDTQC0AUAUAUAUAUAUAUAUAUAU AUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUB//Z ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=custom.css Content-Type: text/css; charset=UTF-8; name=custom.css Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/custom.css Content-Transfer-Encoding: 8bit #login_form {margin:0;} body {background: #fff;} #logo, .join #logo { background: url("custom/logo.jpg") no-repeat scroll 0 0 transparent;height: 59px; margin-top: 21px; width: 260px; margin-left: 0; margin-bottom: 0;} a.red, h1, h2, .populated strong, ul.pager a:hover, #login li a, #infoDVD strong, #join_page .dots strong, #join_page .dots h3, .header .dvds_online span, .frames .scene_title a, .frames .scene_title a:hover, #choose_format .body a, #terms h6 {color: #0000A0 !important;} .menucolor:hover, .png_bg_scale a {background: url("images/content/scene/menu_item.png") repeat scroll center bottom #0000A0;} .glide_categories .glide_up {background: #0000A0 url(images/content/scene/glider_bt_up.png) bottom center no-repeat;} .glide_categories .glide_down {background: #0000A0 url(images/content/scene/glider_bt_down.png) top center no-repeat;} a.txtbutton, .frames .download_links ul li.active_format, .dvd_menu dt.active, .scene_menu dt.active {background-color: #0000A0;} #login_btn .arr, #next_btn .arr, #prev_btn .arr, .ul1 .bullet {background: #0000A0;} .ul2 .bullet {background: #9E9E9E;} .covers {border-top: 2px solid #0000A0;} .coverbox_last img, .coverbox img {border: 2px solid #0000A0;} #js_thumbs_view {border-bottom: 2px solid #0000A0; border-top: 2px solid #0000A0;} .dvd_menu, .scene_menu {border-bottom: 2px solid #0000A0;} .filter_pager_bot {border-top: 2px solid #0000A0 !important;} .filter_pager_bot ul.pager span, #favor ul.pager span, .filter_pager_top ul.pager span {background-color: #0000A0 !important;} #join_page .join_button{background-color:#0000A0;} #splash, #splash_out {position: absolute;} #splash_in, #splash_in_gay, #splash_in_shemale{top: 200px; margin: 0 0 0 -321px;} ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=prototype1.6.0.3.js Content-Type: application/javascript; charset=UTF-8; name=prototype1.6.0.3.js Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/prototype1.6.0.3.js Content-Transfer-Encoding: Base64 LyogIFByb3RvdHlwZSBKYXZhU2NyaXB0IGZyYW1ld29yaywgdmVyc2lvbiAxLjYu MC4zCiAqICAoYykgMjAwNS0yMDA4IFNhbSBTdGVwaGVuc29uCiAqCiAqICBQcm90 b3R5cGUgaXMgZnJlZWx5IGRpc3RyaWJ1dGFibGUgdW5kZXIgdGhlIHRlcm1zIG9m IGFuIE1JVC1zdHlsZSBsaWNlbnNlLgogKiAgRm9yIGRldGFpbHMsIHNlZSB0aGUg UHJvdG90eXBlIHdlYiBzaXRlOiBodHRwOi8vd3d3LnByb3RvdHlwZWpzLm9yZy8K ICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgp2YXIgUHJvdG90eXBl ID0gewogIFZlcnNpb246ICcxLjYuMC4zJywKCiAgQnJvd3NlcjogewogICAgSUU6 ICAgICAhISh3aW5kb3cuYXR0YWNoRXZlbnQgJiYKICAgICAgbmF2aWdhdG9yLnVz ZXJBZ2VudC5pbmRleE9mKCdPcGVyYScpID09PSAtMSksCiAgICBPcGVyYTogIG5h dmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignT3BlcmEnKSA+IC0xLAogICAgV2Vi S2l0OiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0FwcGxlV2ViS2l0Lycp ID4gLTEsCiAgICBHZWNrbzogIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZign R2Vja28nKSA+IC0xICYmCiAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhP ZignS0hUTUwnKSA9PT0gLTEsCiAgICBNb2JpbGVTYWZhcmk6ICEhbmF2aWdhdG9y LnVzZXJBZ2VudC5tYXRjaCgvQXBwbGUuKk1vYmlsZS4qU2FmYXJpLykKICB9LAoK ICBCcm93c2VyRmVhdHVyZXM6IHsKICAgIFhQYXRoOiAhIWRvY3VtZW50LmV2YWx1 YXRlLAogICAgU2VsZWN0b3JzQVBJOiAhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Is CiAgICBFbGVtZW50RXh0ZW5zaW9uczogISF3aW5kb3cuSFRNTEVsZW1lbnQsCiAg ICBTcGVjaWZpY0VsZW1lbnRFeHRlbnNpb25zOgogICAgICBkb2N1bWVudC5jcmVh dGVFbGVtZW50KCdkaXYnKVsnX19wcm90b19fJ10gJiYKICAgICAgZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgnZGl2JylbJ19fcHJvdG9fXyddICE9PQogICAgICAgIGRv Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKVsnX19wcm90b19fJ10KICB9LAoK ICBTY3JpcHRGcmFnbWVudDogJzxzY3JpcHRbXj5dKj4oW1xcU1xcc10qPyk8XC9z Y3JpcHQ+JywKICBKU09ORmlsdGVyOiAvXlwvXCotc2VjdXJlLShbXHNcU10qKVwq XC9ccyokLywKCiAgZW1wdHlGdW5jdGlvbjogZnVuY3Rpb24oKSB7IH0sCiAgSzog ZnVuY3Rpb24oeCkgeyByZXR1cm4geCB9Cn07CgppZiAoUHJvdG90eXBlLkJyb3dz ZXIuTW9iaWxlU2FmYXJpKQogIFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuU3Bl Y2lmaWNFbGVtZW50RXh0ZW5zaW9ucyA9IGZhbHNlOwoKCi8qIEJhc2VkIG9uIEFs ZXggQXJuZWxsJ3MgaW5oZXJpdGFuY2UgaW1wbGVtZW50YXRpb24uICovCnZhciBD bGFzcyA9IHsKICBjcmVhdGU6IGZ1bmN0aW9uKCkgewogICAgdmFyIHBhcmVudCA9 IG51bGwsIHByb3BlcnRpZXMgPSAkQShhcmd1bWVudHMpOwogICAgaWYgKE9iamVj dC5pc0Z1bmN0aW9uKHByb3BlcnRpZXNbMF0pKQogICAgICBwYXJlbnQgPSBwcm9w ZXJ0aWVzLnNoaWZ0KCk7CgogICAgZnVuY3Rpb24ga2xhc3MoKSB7CiAgICAgIHRo aXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgfQoKICAg IE9iamVjdC5leHRlbmQoa2xhc3MsIENsYXNzLk1ldGhvZHMpOwogICAga2xhc3Mu c3VwZXJjbGFzcyA9IHBhcmVudDsKICAgIGtsYXNzLnN1YmNsYXNzZXMgPSBbXTsK CiAgICBpZiAocGFyZW50KSB7CiAgICAgIHZhciBzdWJjbGFzcyA9IGZ1bmN0aW9u KCkgeyB9OwogICAgICBzdWJjbGFzcy5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90 eXBlOwogICAgICBrbGFzcy5wcm90b3R5cGUgPSBuZXcgc3ViY2xhc3M7CiAgICAg IHBhcmVudC5zdWJjbGFzc2VzLnB1c2goa2xhc3MpOwogICAgfQoKICAgIGZvciAo dmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykKICAgICAga2xh c3MuYWRkTWV0aG9kcyhwcm9wZXJ0aWVzW2ldKTsKCiAgICBpZiAoIWtsYXNzLnBy b3RvdHlwZS5pbml0aWFsaXplKQogICAgICBrbGFzcy5wcm90b3R5cGUuaW5pdGlh bGl6ZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwoKICAgIGtsYXNzLnByb3Rv dHlwZS5jb25zdHJ1Y3RvciA9IGtsYXNzOwoKICAgIHJldHVybiBrbGFzczsKICB9 Cn07CgpDbGFzcy5NZXRob2RzID0gewogIGFkZE1ldGhvZHM6IGZ1bmN0aW9uKHNv dXJjZSkgewogICAgdmFyIGFuY2VzdG9yICAgPSB0aGlzLnN1cGVyY2xhc3MgJiYg dGhpcy5zdXBlcmNsYXNzLnByb3RvdHlwZTsKICAgIHZhciBwcm9wZXJ0aWVzID0g T2JqZWN0LmtleXMoc291cmNlKTsKCiAgICBpZiAoIU9iamVjdC5rZXlzKHsgdG9T dHJpbmc6IHRydWUgfSkubGVuZ3RoKQogICAgICBwcm9wZXJ0aWVzLnB1c2goInRv U3RyaW5nIiwgInZhbHVlT2YiKTsKCiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3Ro ID0gcHJvcGVydGllcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2 YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldLCB2YWx1ZSA9IHNvdXJjZVtwcm9w ZXJ0eV07CiAgICAgIGlmIChhbmNlc3RvciAmJiBPYmplY3QuaXNGdW5jdGlvbih2 YWx1ZSkgJiYKICAgICAgICAgIHZhbHVlLmFyZ3VtZW50TmFtZXMoKS5maXJzdCgp ID09ICIkc3VwZXIiKSB7CiAgICAgICAgdmFyIG1ldGhvZCA9IHZhbHVlOwogICAg ICAgIHZhbHVlID0gKGZ1bmN0aW9uKG0pIHsKICAgICAgICAgIHJldHVybiBmdW5j dGlvbigpIHsgcmV0dXJuIGFuY2VzdG9yW21dLmFwcGx5KHRoaXMsIGFyZ3VtZW50 cykgfTsKICAgICAgICB9KShwcm9wZXJ0eSkud3JhcChtZXRob2QpOwoKICAgICAg ICB2YWx1ZS52YWx1ZU9mID0gbWV0aG9kLnZhbHVlT2YuYmluZChtZXRob2QpOwog ICAgICAgIHZhbHVlLnRvU3RyaW5nID0gbWV0aG9kLnRvU3RyaW5nLmJpbmQobWV0 aG9kKTsKICAgICAgfQogICAgICB0aGlzLnByb3RvdHlwZVtwcm9wZXJ0eV0gPSB2 YWx1ZTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9Cn07Cgp2YXIgQWJzdHJh Y3QgPSB7IH07CgpPYmplY3QuZXh0ZW5kID0gZnVuY3Rpb24oZGVzdGluYXRpb24s IHNvdXJjZSkgewogIGZvciAodmFyIHByb3BlcnR5IGluIHNvdXJjZSkKICAgIGRl c3RpbmF0aW9uW3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07CiAgcmV0dXJu IGRlc3RpbmF0aW9uOwp9OwoKT2JqZWN0LmV4dGVuZChPYmplY3QsIHsKICBpbnNw ZWN0OiBmdW5jdGlvbihvYmplY3QpIHsKICAgIHRyeSB7CiAgICAgIGlmIChPYmpl Y3QuaXNVbmRlZmluZWQob2JqZWN0KSkgcmV0dXJuICd1bmRlZmluZWQnOwogICAg ICBpZiAob2JqZWN0ID09PSBudWxsKSByZXR1cm4gJ251bGwnOwogICAgICByZXR1 cm4gb2JqZWN0Lmluc3BlY3QgPyBvYmplY3QuaW5zcGVjdCgpIDogU3RyaW5nKG9i amVjdCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGlmIChlIGluc3RhbmNlb2Yg UmFuZ2VFcnJvcikgcmV0dXJuICcuLi4nOwogICAgICB0aHJvdyBlOwogICAgfQog IH0sCgogIHRvSlNPTjogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICB2YXIgdHlwZSA9 IHR5cGVvZiBvYmplY3Q7CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSAn dW5kZWZpbmVkJzoKICAgICAgY2FzZSAnZnVuY3Rpb24nOgogICAgICBjYXNlICd1 bmtub3duJzogcmV0dXJuOwogICAgICBjYXNlICdib29sZWFuJzogcmV0dXJuIG9i amVjdC50b1N0cmluZygpOwogICAgfQoKICAgIGlmIChvYmplY3QgPT09IG51bGwp IHJldHVybiAnbnVsbCc7CiAgICBpZiAob2JqZWN0LnRvSlNPTikgcmV0dXJuIG9i amVjdC50b0pTT04oKTsKICAgIGlmIChPYmplY3QuaXNFbGVtZW50KG9iamVjdCkp IHJldHVybjsKCiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgcHJv cGVydHkgaW4gb2JqZWN0KSB7CiAgICAgIHZhciB2YWx1ZSA9IE9iamVjdC50b0pT T04ob2JqZWN0W3Byb3BlcnR5XSk7CiAgICAgIGlmICghT2JqZWN0LmlzVW5kZWZp bmVkKHZhbHVlKSkKICAgICAgICByZXN1bHRzLnB1c2gocHJvcGVydHkudG9KU09O KCkgKyAnOiAnICsgdmFsdWUpOwogICAgfQoKICAgIHJldHVybiAneycgKyByZXN1 bHRzLmpvaW4oJywgJykgKyAnfSc7CiAgfSwKCiAgdG9RdWVyeVN0cmluZzogZnVu Y3Rpb24ob2JqZWN0KSB7CiAgICByZXR1cm4gJEgob2JqZWN0KS50b1F1ZXJ5U3Ry aW5nKCk7CiAgfSwKCiAgdG9IVE1MOiBmdW5jdGlvbihvYmplY3QpIHsKICAgIHJl dHVybiBvYmplY3QgJiYgb2JqZWN0LnRvSFRNTCA/IG9iamVjdC50b0hUTUwoKSA6 IFN0cmluZy5pbnRlcnByZXQob2JqZWN0KTsKICB9LAoKICBrZXlzOiBmdW5jdGlv bihvYmplY3QpIHsKICAgIHZhciBrZXlzID0gW107CiAgICBmb3IgKHZhciBwcm9w ZXJ0eSBpbiBvYmplY3QpCiAgICAgIGtleXMucHVzaChwcm9wZXJ0eSk7CiAgICBy ZXR1cm4ga2V5czsKICB9LAoKICB2YWx1ZXM6IGZ1bmN0aW9uKG9iamVjdCkgewog ICAgdmFyIHZhbHVlcyA9IFtdOwogICAgZm9yICh2YXIgcHJvcGVydHkgaW4gb2Jq ZWN0KQogICAgICB2YWx1ZXMucHVzaChvYmplY3RbcHJvcGVydHldKTsKICAgIHJl dHVybiB2YWx1ZXM7CiAgfSwKCiAgY2xvbmU6IGZ1bmN0aW9uKG9iamVjdCkgewog ICAgcmV0dXJuIE9iamVjdC5leHRlbmQoeyB9LCBvYmplY3QpOwogIH0sCgogIGlz RWxlbWVudDogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICByZXR1cm4gISEob2JqZWN0 ICYmIG9iamVjdC5ub2RlVHlwZSA9PSAxKTsKICB9LAoKICBpc0FycmF5OiBmdW5j dGlvbihvYmplY3QpIHsKICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiB0eXBl b2Ygb2JqZWN0ID09ICJvYmplY3QiICYmCiAgICAgICdzcGxpY2UnIGluIG9iamVj dCAmJiAnam9pbicgaW4gb2JqZWN0OwogIH0sCgogIGlzSGFzaDogZnVuY3Rpb24o b2JqZWN0KSB7CiAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgSGFzaDsKICB9 LAoKICBpc0Z1bmN0aW9uOiBmdW5jdGlvbihvYmplY3QpIHsKICAgIHJldHVybiB0 eXBlb2Ygb2JqZWN0ID09ICJmdW5jdGlvbiI7CiAgfSwKCiAgaXNTdHJpbmc6IGZ1 bmN0aW9uKG9iamVjdCkgewogICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT0gInN0 cmluZyI7CiAgfSwKCiAgaXNOdW1iZXI6IGZ1bmN0aW9uKG9iamVjdCkgewogICAg cmV0dXJuIHR5cGVvZiBvYmplY3QgPT0gIm51bWJlciI7CiAgfSwKCiAgaXNVbmRl ZmluZWQ6IGZ1bmN0aW9uKG9iamVjdCkgewogICAgcmV0dXJuIHR5cGVvZiBvYmpl Y3QgPT0gInVuZGVmaW5lZCI7CiAgfQp9KTsKCk9iamVjdC5leHRlbmQoRnVuY3Rp b24ucHJvdG90eXBlLCB7CiAgYXJndW1lbnROYW1lczogZnVuY3Rpb24oKSB7CiAg ICB2YXIgbmFtZXMgPSB0aGlzLnRvU3RyaW5nKCkubWF0Y2goL15bXHNcKF0qZnVu Y3Rpb25bXihdKlwoKFteXCldKilcKS8pWzFdCiAgICAgIC5yZXBsYWNlKC9ccysv ZywgJycpLnNwbGl0KCcsJyk7CiAgICByZXR1cm4gbmFtZXMubGVuZ3RoID09IDEg JiYgIW5hbWVzWzBdID8gW10gOiBuYW1lczsKICB9LAoKICBiaW5kOiBmdW5jdGlv bigpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMiAmJiBPYmplY3QuaXNV bmRlZmluZWQoYXJndW1lbnRzWzBdKSkgcmV0dXJuIHRoaXM7CiAgICB2YXIgX19t ZXRob2QgPSB0aGlzLCBhcmdzID0gJEEoYXJndW1lbnRzKSwgb2JqZWN0ID0gYXJn cy5zaGlmdCgpOwogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4g X19tZXRob2QuYXBwbHkob2JqZWN0LCBhcmdzLmNvbmNhdCgkQShhcmd1bWVudHMp KSk7CiAgICB9CiAgfSwKCiAgYmluZEFzRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24o KSB7CiAgICB2YXIgX19tZXRob2QgPSB0aGlzLCBhcmdzID0gJEEoYXJndW1lbnRz KSwgb2JqZWN0ID0gYXJncy5zaGlmdCgpOwogICAgcmV0dXJuIGZ1bmN0aW9uKGV2 ZW50KSB7CiAgICAgIHJldHVybiBfX21ldGhvZC5hcHBseShvYmplY3QsIFtldmVu dCB8fCB3aW5kb3cuZXZlbnRdLmNvbmNhdChhcmdzKSk7CiAgICB9CiAgfSwKCiAg Y3Vycnk6IGZ1bmN0aW9uKCkgewogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSBy ZXR1cm4gdGhpczsKICAgIHZhciBfX21ldGhvZCA9IHRoaXMsIGFyZ3MgPSAkQShh cmd1bWVudHMpOwogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4g X19tZXRob2QuYXBwbHkodGhpcywgYXJncy5jb25jYXQoJEEoYXJndW1lbnRzKSkp OwogICAgfQogIH0sCgogIGRlbGF5OiBmdW5jdGlvbigpIHsKICAgIHZhciBfX21l dGhvZCA9IHRoaXMsIGFyZ3MgPSAkQShhcmd1bWVudHMpLCB0aW1lb3V0ID0gYXJn cy5zaGlmdCgpICogMTAwMDsKICAgIHJldHVybiB3aW5kb3cuc2V0VGltZW91dChm dW5jdGlvbigpIHsKICAgICAgcmV0dXJuIF9fbWV0aG9kLmFwcGx5KF9fbWV0aG9k LCBhcmdzKTsKICAgIH0sIHRpbWVvdXQpOwogIH0sCgogIGRlZmVyOiBmdW5jdGlv bigpIHsKICAgIHZhciBhcmdzID0gWzAuMDFdLmNvbmNhdCgkQShhcmd1bWVudHMp KTsKICAgIHJldHVybiB0aGlzLmRlbGF5LmFwcGx5KHRoaXMsIGFyZ3MpOwogIH0s CgogIHdyYXA6IGZ1bmN0aW9uKHdyYXBwZXIpIHsKICAgIHZhciBfX21ldGhvZCA9 IHRoaXM7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB3cmFw cGVyLmFwcGx5KHRoaXMsIFtfX21ldGhvZC5iaW5kKHRoaXMpXS5jb25jYXQoJEEo YXJndW1lbnRzKSkpOwogICAgfQogIH0sCgogIG1ldGhvZGl6ZTogZnVuY3Rpb24o KSB7CiAgICBpZiAodGhpcy5fbWV0aG9kaXplZCkgcmV0dXJuIHRoaXMuX21ldGhv ZGl6ZWQ7CiAgICB2YXIgX19tZXRob2QgPSB0aGlzOwogICAgcmV0dXJuIHRoaXMu X21ldGhvZGl6ZWQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIF9fbWV0aG9k LmFwcGx5KG51bGwsIFt0aGlzXS5jb25jYXQoJEEoYXJndW1lbnRzKSkpOwogICAg fTsKICB9Cn0pOwoKRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7 CiAgcmV0dXJuICciJyArIHRoaXMuZ2V0VVRDRnVsbFllYXIoKSArICctJyArCiAg ICAodGhpcy5nZXRVVENNb250aCgpICsgMSkudG9QYWRkZWRTdHJpbmcoMikgKyAn LScgKwogICAgdGhpcy5nZXRVVENEYXRlKCkudG9QYWRkZWRTdHJpbmcoMikgKyAn VCcgKwogICAgdGhpcy5nZXRVVENIb3VycygpLnRvUGFkZGVkU3RyaW5nKDIpICsg JzonICsKICAgIHRoaXMuZ2V0VVRDTWludXRlcygpLnRvUGFkZGVkU3RyaW5nKDIp ICsgJzonICsKICAgIHRoaXMuZ2V0VVRDU2Vjb25kcygpLnRvUGFkZGVkU3RyaW5n KDIpICsgJ1oiJzsKfTsKCnZhciBUcnkgPSB7CiAgdGhlc2U6IGZ1bmN0aW9uKCkg ewogICAgdmFyIHJldHVyblZhbHVlOwoKICAgIGZvciAodmFyIGkgPSAwLCBsZW5n dGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAg dmFyIGxhbWJkYSA9IGFyZ3VtZW50c1tpXTsKICAgICAgdHJ5IHsKICAgICAgICBy ZXR1cm5WYWx1ZSA9IGxhbWJkYSgpOwogICAgICAgIGJyZWFrOwogICAgICB9IGNh dGNoIChlKSB7IH0KICAgIH0KCiAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgfQp9 OwoKUmVnRXhwLnByb3RvdHlwZS5tYXRjaCA9IFJlZ0V4cC5wcm90b3R5cGUudGVz dDsKClJlZ0V4cC5lc2NhcGUgPSBmdW5jdGlvbihzdHIpIHsKICByZXR1cm4gU3Ry aW5nKHN0cikucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFtcXVwvXFxdKS9nLCAn XFwkMScpOwp9OwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgp2YXIg UGVyaW9kaWNhbEV4ZWN1dGVyID0gQ2xhc3MuY3JlYXRlKHsKICBpbml0aWFsaXpl OiBmdW5jdGlvbihjYWxsYmFjaywgZnJlcXVlbmN5KSB7CiAgICB0aGlzLmNhbGxi YWNrID0gY2FsbGJhY2s7CiAgICB0aGlzLmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsK ICAgIHRoaXMuY3VycmVudGx5RXhlY3V0aW5nID0gZmFsc2U7CgogICAgdGhpcy5y ZWdpc3RlckNhbGxiYWNrKCk7CiAgfSwKCiAgcmVnaXN0ZXJDYWxsYmFjazogZnVu Y3Rpb24oKSB7CiAgICB0aGlzLnRpbWVyID0gc2V0SW50ZXJ2YWwodGhpcy5vblRp bWVyRXZlbnQuYmluZCh0aGlzKSwgdGhpcy5mcmVxdWVuY3kgKiAxMDAwKTsKICB9 LAoKICBleGVjdXRlOiBmdW5jdGlvbigpIHsKICAgIHRoaXMuY2FsbGJhY2sodGhp cyk7CiAgfSwKCiAgc3RvcDogZnVuY3Rpb24oKSB7CiAgICBpZiAoIXRoaXMudGlt ZXIpIHJldHVybjsKICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcik7CiAgICB0 aGlzLnRpbWVyID0gbnVsbDsKICB9LAoKICBvblRpbWVyRXZlbnQ6IGZ1bmN0aW9u KCkgewogICAgaWYgKCF0aGlzLmN1cnJlbnRseUV4ZWN1dGluZykgewogICAgICB0 cnkgewogICAgICAgIHRoaXMuY3VycmVudGx5RXhlY3V0aW5nID0gdHJ1ZTsKICAg ICAgICB0aGlzLmV4ZWN1dGUoKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0 aGlzLmN1cnJlbnRseUV4ZWN1dGluZyA9IGZhbHNlOwogICAgICB9CiAgICB9CiAg fQp9KTsKT2JqZWN0LmV4dGVuZChTdHJpbmcsIHsKICBpbnRlcnByZXQ6IGZ1bmN0 aW9uKHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogU3Ry aW5nKHZhbHVlKTsKICB9LAogIHNwZWNpYWxDaGFyOiB7CiAgICAnXGInOiAnXFxi JywKICAgICdcdCc6ICdcXHQnLAogICAgJ1xuJzogJ1xcbicsCiAgICAnXGYnOiAn XFxmJywKICAgICdccic6ICdcXHInLAogICAgJ1xcJzogJ1xcXFwnCiAgfQp9KTsK Ck9iamVjdC5leHRlbmQoU3RyaW5nLnByb3RvdHlwZSwgewogIGdzdWI6IGZ1bmN0 aW9uKHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7CiAgICB2YXIgcmVzdWx0ID0gJycs IHNvdXJjZSA9IHRoaXMsIG1hdGNoOwogICAgcmVwbGFjZW1lbnQgPSBhcmd1bWVu dHMuY2FsbGVlLnByZXBhcmVSZXBsYWNlbWVudChyZXBsYWNlbWVudCk7CgogICAg d2hpbGUgKHNvdXJjZS5sZW5ndGggPiAwKSB7CiAgICAgIGlmIChtYXRjaCA9IHNv dXJjZS5tYXRjaChwYXR0ZXJuKSkgewogICAgICAgIHJlc3VsdCArPSBzb3VyY2Uu c2xpY2UoMCwgbWF0Y2guaW5kZXgpOwogICAgICAgIHJlc3VsdCArPSBTdHJpbmcu aW50ZXJwcmV0KHJlcGxhY2VtZW50KG1hdGNoKSk7CiAgICAgICAgc291cmNlICA9 IHNvdXJjZS5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7CiAg ICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0ICs9IHNvdXJjZSwgc291cmNlID0g Jyc7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfSwKCiAgc3Vi OiBmdW5jdGlvbihwYXR0ZXJuLCByZXBsYWNlbWVudCwgY291bnQpIHsKICAgIHJl cGxhY2VtZW50ID0gdGhpcy5nc3ViLnByZXBhcmVSZXBsYWNlbWVudChyZXBsYWNl bWVudCk7CiAgICBjb3VudCA9IE9iamVjdC5pc1VuZGVmaW5lZChjb3VudCkgPyAx IDogY291bnQ7CgogICAgcmV0dXJuIHRoaXMuZ3N1YihwYXR0ZXJuLCBmdW5jdGlv bihtYXRjaCkgewogICAgICBpZiAoLS1jb3VudCA8IDApIHJldHVybiBtYXRjaFsw XTsKICAgICAgcmV0dXJuIHJlcGxhY2VtZW50KG1hdGNoKTsKICAgIH0pOwogIH0s CgogIHNjYW46IGZ1bmN0aW9uKHBhdHRlcm4sIGl0ZXJhdG9yKSB7CiAgICB0aGlz LmdzdWIocGF0dGVybiwgaXRlcmF0b3IpOwogICAgcmV0dXJuIFN0cmluZyh0aGlz KTsKICB9LAoKICB0cnVuY2F0ZTogZnVuY3Rpb24obGVuZ3RoLCB0cnVuY2F0aW9u KSB7CiAgICBsZW5ndGggPSBsZW5ndGggfHwgMzA7CiAgICB0cnVuY2F0aW9uID0g T2JqZWN0LmlzVW5kZWZpbmVkKHRydW5jYXRpb24pID8gJy4uLicgOiB0cnVuY2F0 aW9uOwogICAgcmV0dXJuIHRoaXMubGVuZ3RoID4gbGVuZ3RoID8KICAgICAgdGhp cy5zbGljZSgwLCBsZW5ndGggLSB0cnVuY2F0aW9uLmxlbmd0aCkgKyB0cnVuY2F0 aW9uIDogU3RyaW5nKHRoaXMpOwogIH0sCgogIHN0cmlwOiBmdW5jdGlvbigpIHsK ICAgIHJldHVybiB0aGlzLnJlcGxhY2UoL15ccysvLCAnJykucmVwbGFjZSgvXHMr JC8sICcnKTsKICB9LAoKICBzdHJpcFRhZ3M6IGZ1bmN0aW9uKCkgewogICAgcmV0 dXJuIHRoaXMucmVwbGFjZSgvPFwvP1tePl0rPi9naSwgJycpOwogIH0sCgogIHN0 cmlwU2NyaXB0czogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5yZXBsYWNl KG5ldyBSZWdFeHAoUHJvdG90eXBlLlNjcmlwdEZyYWdtZW50LCAnaW1nJyksICcn KTsKICB9LAoKICBleHRyYWN0U2NyaXB0czogZnVuY3Rpb24oKSB7CiAgICB2YXIg bWF0Y2hBbGwgPSBuZXcgUmVnRXhwKFByb3RvdHlwZS5TY3JpcHRGcmFnbWVudCwg J2ltZycpOwogICAgdmFyIG1hdGNoT25lID0gbmV3IFJlZ0V4cChQcm90b3R5cGUu U2NyaXB0RnJhZ21lbnQsICdpbScpOwogICAgcmV0dXJuICh0aGlzLm1hdGNoKG1h dGNoQWxsKSB8fCBbXSkubWFwKGZ1bmN0aW9uKHNjcmlwdFRhZykgewogICAgICBy ZXR1cm4gKHNjcmlwdFRhZy5tYXRjaChtYXRjaE9uZSkgfHwgWycnLCAnJ10pWzFd OwogICAgfSk7CiAgfSwKCiAgZXZhbFNjcmlwdHM6IGZ1bmN0aW9uKCkgewogICAg cmV0dXJuIHRoaXMuZXh0cmFjdFNjcmlwdHMoKS5tYXAoZnVuY3Rpb24oc2NyaXB0 KSB7IHJldHVybiBldmFsKHNjcmlwdCkgfSk7CiAgfSwKCiAgZXNjYXBlSFRNTDog ZnVuY3Rpb24oKSB7CiAgICB2YXIgc2VsZiA9IGFyZ3VtZW50cy5jYWxsZWU7CiAg ICBzZWxmLnRleHQuZGF0YSA9IHRoaXM7CiAgICByZXR1cm4gc2VsZi5kaXYuaW5u ZXJIVE1MOwogIH0sCgogIHVuZXNjYXBlSFRNTDogZnVuY3Rpb24oKSB7CiAgICB2 YXIgZGl2ID0gbmV3IEVsZW1lbnQoJ2RpdicpOwogICAgZGl2LmlubmVySFRNTCA9 IHRoaXMuc3RyaXBUYWdzKCk7CiAgICByZXR1cm4gZGl2LmNoaWxkTm9kZXNbMF0g PyAoZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMSA/CiAgICAgICRBKGRpdi5jaGls ZE5vZGVzKS5pbmplY3QoJycsIGZ1bmN0aW9uKG1lbW8sIG5vZGUpIHsgcmV0dXJu IG1lbW8rbm9kZS5ub2RlVmFsdWUgfSkgOgogICAgICBkaXYuY2hpbGROb2Rlc1sw XS5ub2RlVmFsdWUpIDogJyc7CiAgfSwKCiAgdG9RdWVyeVBhcmFtczogZnVuY3Rp b24oc2VwYXJhdG9yKSB7CiAgICB2YXIgbWF0Y2ggPSB0aGlzLnN0cmlwKCkubWF0 Y2goLyhbXj8jXSopKCMuKik/JC8pOwogICAgaWYgKCFtYXRjaCkgcmV0dXJuIHsg fTsKCiAgICByZXR1cm4gbWF0Y2hbMV0uc3BsaXQoc2VwYXJhdG9yIHx8ICcmJyku aW5qZWN0KHsgfSwgZnVuY3Rpb24oaGFzaCwgcGFpcikgewogICAgICBpZiAoKHBh aXIgPSBwYWlyLnNwbGl0KCc9JykpWzBdKSB7CiAgICAgICAgdmFyIGtleSA9IGRl Y29kZVVSSUNvbXBvbmVudChwYWlyLnNoaWZ0KCkpOwogICAgICAgIHZhciB2YWx1 ZSA9IHBhaXIubGVuZ3RoID4gMSA/IHBhaXIuam9pbignPScpIDogcGFpclswXTsK ICAgICAgICBpZiAodmFsdWUgIT0gdW5kZWZpbmVkKSB2YWx1ZSA9IGRlY29kZVVS SUNvbXBvbmVudCh2YWx1ZSk7CgogICAgICAgIGlmIChrZXkgaW4gaGFzaCkgewog ICAgICAgICAgaWYgKCFPYmplY3QuaXNBcnJheShoYXNoW2tleV0pKSBoYXNoW2tl eV0gPSBbaGFzaFtrZXldXTsKICAgICAgICAgIGhhc2hba2V5XS5wdXNoKHZhbHVl KTsKICAgICAgICB9CiAgICAgICAgZWxzZSBoYXNoW2tleV0gPSB2YWx1ZTsKICAg ICAgfQogICAgICByZXR1cm4gaGFzaDsKICAgIH0pOwogIH0sCgogIHRvQXJyYXk6 IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuc3BsaXQoJycpOwogIH0sCgog IHN1Y2M6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuc2xpY2UoMCwgdGhp cy5sZW5ndGggLSAxKSArCiAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5j aGFyQ29kZUF0KHRoaXMubGVuZ3RoIC0gMSkgKyAxKTsKICB9LAoKICB0aW1lczog ZnVuY3Rpb24oY291bnQpIHsKICAgIHJldHVybiBjb3VudCA8IDEgPyAnJyA6IG5l dyBBcnJheShjb3VudCArIDEpLmpvaW4odGhpcyk7CiAgfSwKCiAgY2FtZWxpemU6 IGZ1bmN0aW9uKCkgewogICAgdmFyIHBhcnRzID0gdGhpcy5zcGxpdCgnLScpLCBs ZW4gPSBwYXJ0cy5sZW5ndGg7CiAgICBpZiAobGVuID09IDEpIHJldHVybiBwYXJ0 c1swXTsKCiAgICB2YXIgY2FtZWxpemVkID0gdGhpcy5jaGFyQXQoMCkgPT0gJy0n CiAgICAgID8gcGFydHNbMF0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwYXJ0 c1swXS5zdWJzdHJpbmcoMSkKICAgICAgOiBwYXJ0c1swXTsKCiAgICBmb3IgKHZh ciBpID0gMTsgaSA8IGxlbjsgaSsrKQogICAgICBjYW1lbGl6ZWQgKz0gcGFydHNb aV0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwYXJ0c1tpXS5zdWJzdHJpbmco MSk7CgogICAgcmV0dXJuIGNhbWVsaXplZDsKICB9LAoKICBjYXBpdGFsaXplOiBm dW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLmNoYXJBdCgwKS50b1VwcGVyQ2Fz ZSgpICsgdGhpcy5zdWJzdHJpbmcoMSkudG9Mb3dlckNhc2UoKTsKICB9LAoKICB1 bmRlcnNjb3JlOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLmdzdWIoLzo6 LywgJy8nKS5nc3ViKC8oW0EtWl0rKShbQS1aXVthLXpdKS8sJyN7MX1fI3syfScp LmdzdWIoLyhbYS16XGRdKShbQS1aXSkvLCcjezF9XyN7Mn0nKS5nc3ViKC8tLywn XycpLnRvTG93ZXJDYXNlKCk7CiAgfSwKCiAgZGFzaGVyaXplOiBmdW5jdGlvbigp IHsKICAgIHJldHVybiB0aGlzLmdzdWIoL18vLCctJyk7CiAgfSwKCiAgaW5zcGVj dDogZnVuY3Rpb24odXNlRG91YmxlUXVvdGVzKSB7CiAgICB2YXIgZXNjYXBlZFN0 cmluZyA9IHRoaXMuZ3N1YigvW1x4MDAtXHgxZlxcXS8sIGZ1bmN0aW9uKG1hdGNo KSB7CiAgICAgIHZhciBjaGFyYWN0ZXIgPSBTdHJpbmcuc3BlY2lhbENoYXJbbWF0 Y2hbMF1dOwogICAgICByZXR1cm4gY2hhcmFjdGVyID8gY2hhcmFjdGVyIDogJ1xc dTAwJyArIG1hdGNoWzBdLmNoYXJDb2RlQXQoKS50b1BhZGRlZFN0cmluZygyLCAx Nik7CiAgICB9KTsKICAgIGlmICh1c2VEb3VibGVRdW90ZXMpIHJldHVybiAnIicg KyBlc2NhcGVkU3RyaW5nLnJlcGxhY2UoLyIvZywgJ1xcIicpICsgJyInOwogICAg cmV0dXJuICInIiArIGVzY2FwZWRTdHJpbmcucmVwbGFjZSgvJy9nLCAnXFxcJycp ICsgIiciOwogIH0sCgogIHRvSlNPTjogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4g dGhpcy5pbnNwZWN0KHRydWUpOwogIH0sCgogIHVuZmlsdGVySlNPTjogZnVuY3Rp b24oZmlsdGVyKSB7CiAgICByZXR1cm4gdGhpcy5zdWIoZmlsdGVyIHx8IFByb3Rv dHlwZS5KU09ORmlsdGVyLCAnI3sxfScpOwogIH0sCgogIGlzSlNPTjogZnVuY3Rp b24oKSB7CiAgICB2YXIgc3RyID0gdGhpczsKICAgIGlmIChzdHIuYmxhbmsoKSkg cmV0dXJuIGZhbHNlOwogICAgc3RyID0gdGhpcy5yZXBsYWNlKC9cXC4vZywgJ0An KS5yZXBsYWNlKC8iW14iXFxcblxyXSoiL2csICcnKTsKICAgIHJldHVybiAoL15b LDp7fVxbXF0wLTkuXC0rRWFlZmxuci11IFxuXHJcdF0qJC8pLnRlc3Qoc3RyKTsK ICB9LAoKICBldmFsSlNPTjogZnVuY3Rpb24oc2FuaXRpemUpIHsKICAgIHZhciBq c29uID0gdGhpcy51bmZpbHRlckpTT04oKTsKICAgIHRyeSB7CiAgICAgIGlmICgh c2FuaXRpemUgfHwganNvbi5pc0pTT04oKSkgcmV0dXJuIGV2YWwoJygnICsganNv biArICcpJyk7CiAgICB9IGNhdGNoIChlKSB7IH0KICAgIHRocm93IG5ldyBTeW50 YXhFcnJvcignQmFkbHkgZm9ybWVkIEpTT04gc3RyaW5nOiAnICsgdGhpcy5pbnNw ZWN0KCkpOwogIH0sCgogIGluY2x1ZGU6IGZ1bmN0aW9uKHBhdHRlcm4pIHsKICAg IHJldHVybiB0aGlzLmluZGV4T2YocGF0dGVybikgPiAtMTsKICB9LAoKICBzdGFy dHNXaXRoOiBmdW5jdGlvbihwYXR0ZXJuKSB7CiAgICByZXR1cm4gdGhpcy5pbmRl eE9mKHBhdHRlcm4pID09PSAwOwogIH0sCgogIGVuZHNXaXRoOiBmdW5jdGlvbihw YXR0ZXJuKSB7CiAgICB2YXIgZCA9IHRoaXMubGVuZ3RoIC0gcGF0dGVybi5sZW5n dGg7CiAgICByZXR1cm4gZCA+PSAwICYmIHRoaXMubGFzdEluZGV4T2YocGF0dGVy bikgPT09IGQ7CiAgfSwKCiAgZW1wdHk6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJu IHRoaXMgPT0gJyc7CiAgfSwKCiAgYmxhbms6IGZ1bmN0aW9uKCkgewogICAgcmV0 dXJuIC9eXHMqJC8udGVzdCh0aGlzKTsKICB9LAoKICBpbnRlcnBvbGF0ZTogZnVu Y3Rpb24ob2JqZWN0LCBwYXR0ZXJuKSB7CiAgICByZXR1cm4gbmV3IFRlbXBsYXRl KHRoaXMsIHBhdHRlcm4pLmV2YWx1YXRlKG9iamVjdCk7CiAgfQp9KTsKCmlmIChQ cm90b3R5cGUuQnJvd3Nlci5XZWJLaXQgfHwgUHJvdG90eXBlLkJyb3dzZXIuSUUp IE9iamVjdC5leHRlbmQoU3RyaW5nLnByb3RvdHlwZSwgewogIGVzY2FwZUhUTUw6 IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvJi9nLCcmYW1w OycpLnJlcGxhY2UoLzwvZywnJmx0OycpLnJlcGxhY2UoLz4vZywnJmd0OycpOwog IH0sCiAgdW5lc2NhcGVIVE1MOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlz LnN0cmlwVGFncygpLnJlcGxhY2UoLyZhbXA7L2csJyYnKS5yZXBsYWNlKC8mbHQ7 L2csJzwnKS5yZXBsYWNlKC8mZ3Q7L2csJz4nKTsKICB9Cn0pOwoKU3RyaW5nLnBy b3RvdHlwZS5nc3ViLnByZXBhcmVSZXBsYWNlbWVudCA9IGZ1bmN0aW9uKHJlcGxh Y2VtZW50KSB7CiAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHJlcGxhY2VtZW50KSkg cmV0dXJuIHJlcGxhY2VtZW50OwogIHZhciB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0 ZShyZXBsYWNlbWVudCk7CiAgcmV0dXJuIGZ1bmN0aW9uKG1hdGNoKSB7IHJldHVy biB0ZW1wbGF0ZS5ldmFsdWF0ZShtYXRjaCkgfTsKfTsKClN0cmluZy5wcm90b3R5 cGUucGFyc2VRdWVyeSA9IFN0cmluZy5wcm90b3R5cGUudG9RdWVyeVBhcmFtczsK Ck9iamVjdC5leHRlbmQoU3RyaW5nLnByb3RvdHlwZS5lc2NhcGVIVE1MLCB7CiAg ZGl2OiAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksCiAgdGV4dDogZG9j dW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpCn0pOwoKU3RyaW5nLnByb3RvdHlwZS5l c2NhcGVIVE1MLmRpdi5hcHBlbmRDaGlsZChTdHJpbmcucHJvdG90eXBlLmVzY2Fw ZUhUTUwudGV4dCk7Cgp2YXIgVGVtcGxhdGUgPSBDbGFzcy5jcmVhdGUoewogIGlu aXRpYWxpemU6IGZ1bmN0aW9uKHRlbXBsYXRlLCBwYXR0ZXJuKSB7CiAgICB0aGlz LnRlbXBsYXRlID0gdGVtcGxhdGUudG9TdHJpbmcoKTsKICAgIHRoaXMucGF0dGVy biA9IHBhdHRlcm4gfHwgVGVtcGxhdGUuUGF0dGVybjsKICB9LAoKICBldmFsdWF0 ZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24o b2JqZWN0LnRvVGVtcGxhdGVSZXBsYWNlbWVudHMpKQogICAgICBvYmplY3QgPSBv YmplY3QudG9UZW1wbGF0ZVJlcGxhY2VtZW50cygpOwoKICAgIHJldHVybiB0aGlz LnRlbXBsYXRlLmdzdWIodGhpcy5wYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCkgewog ICAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAnJzsKCiAgICAgIHZhciBi ZWZvcmUgPSBtYXRjaFsxXSB8fCAnJzsKICAgICAgaWYgKGJlZm9yZSA9PSAnXFwn KSByZXR1cm4gbWF0Y2hbMl07CgogICAgICB2YXIgY3R4ID0gb2JqZWN0LCBleHBy ID0gbWF0Y2hbM107CiAgICAgIHZhciBwYXR0ZXJuID0gL14oW14uW10rfFxbKCg/ Oi4qP1teXFxdKT8pXF0pKFwufFxbfCQpLzsKICAgICAgbWF0Y2ggPSBwYXR0ZXJu LmV4ZWMoZXhwcik7CiAgICAgIGlmIChtYXRjaCA9PSBudWxsKSByZXR1cm4gYmVm b3JlOwoKICAgICAgd2hpbGUgKG1hdGNoICE9IG51bGwpIHsKICAgICAgICB2YXIg Y29tcCA9IG1hdGNoWzFdLnN0YXJ0c1dpdGgoJ1snKSA/IG1hdGNoWzJdLmdzdWIo J1xcXFxdJywgJ10nKSA6IG1hdGNoWzFdOwogICAgICAgIGN0eCA9IGN0eFtjb21w XTsKICAgICAgICBpZiAobnVsbCA9PSBjdHggfHwgJycgPT0gbWF0Y2hbM10pIGJy ZWFrOwogICAgICAgIGV4cHIgPSBleHByLnN1YnN0cmluZygnWycgPT0gbWF0Y2hb M10gPyBtYXRjaFsxXS5sZW5ndGggOiBtYXRjaFswXS5sZW5ndGgpOwogICAgICAg IG1hdGNoID0gcGF0dGVybi5leGVjKGV4cHIpOwogICAgICB9CgogICAgICByZXR1 cm4gYmVmb3JlICsgU3RyaW5nLmludGVycHJldChjdHgpOwogICAgfSk7CiAgfQp9 KTsKVGVtcGxhdGUuUGF0dGVybiA9IC8oXnwufFxyfFxuKSgjXHsoLio/KVx9KS87 Cgp2YXIgJGJyZWFrID0geyB9OwoKdmFyIEVudW1lcmFibGUgPSB7CiAgZWFjaDog ZnVuY3Rpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKICAgIHZhciBpbmRleCA9IDA7 CiAgICB0cnkgewogICAgICB0aGlzLl9lYWNoKGZ1bmN0aW9uKHZhbHVlKSB7CiAg ICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgrKyk7CiAg ICAgIH0pOwogICAgfSBjYXRjaCAoZSkgewogICAgICBpZiAoZSAhPSAkYnJlYWsp IHRocm93IGU7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9LAoKICBlYWNoU2xp Y2U6IGZ1bmN0aW9uKG51bWJlciwgaXRlcmF0b3IsIGNvbnRleHQpIHsKICAgIHZh ciBpbmRleCA9IC1udW1iZXIsIHNsaWNlcyA9IFtdLCBhcnJheSA9IHRoaXMudG9B cnJheSgpOwogICAgaWYgKG51bWJlciA8IDEpIHJldHVybiBhcnJheTsKICAgIHdo aWxlICgoaW5kZXggKz0gbnVtYmVyKSA8IGFycmF5Lmxlbmd0aCkKICAgICAgc2xp Y2VzLnB1c2goYXJyYXkuc2xpY2UoaW5kZXgsIGluZGV4K251bWJlcikpOwogICAg cmV0dXJuIHNsaWNlcy5jb2xsZWN0KGl0ZXJhdG9yLCBjb250ZXh0KTsKICB9LAoK ICBhbGw6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250ZXh0KSB7CiAgICBpdGVyYXRv ciA9IGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LOwogICAgdmFyIHJlc3VsdCA9IHRy dWU7CiAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAg IHJlc3VsdCA9IHJlc3VsdCAmJiAhIWl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFs dWUsIGluZGV4KTsKICAgICAgaWYgKCFyZXN1bHQpIHRocm93ICRicmVhazsKICAg IH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9LAoKICBhbnk6IGZ1bmN0aW9uKGl0 ZXJhdG9yLCBjb250ZXh0KSB7CiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yIHx8IFBy b3RvdHlwZS5LOwogICAgdmFyIHJlc3VsdCA9IGZhbHNlOwogICAgdGhpcy5lYWNo KGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICBpZiAocmVzdWx0ID0gISFp dGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCkpCiAgICAgICAgdGhy b3cgJGJyZWFrOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0sCgogIGNv bGxlY3Q6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250ZXh0KSB7CiAgICBpdGVyYXRv ciA9IGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LOwogICAgdmFyIHJlc3VsdHMgPSBb XTsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAg cmVzdWx0cy5wdXNoKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4 KSk7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHRzOwogIH0sCgogIGRldGVjdDog ZnVuY3Rpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKICAgIHZhciByZXN1bHQ7CiAg ICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIGlmIChp dGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCkpIHsKICAgICAgICBy ZXN1bHQgPSB2YWx1ZTsKICAgICAgICB0aHJvdyAkYnJlYWs7CiAgICAgIH0KICAg IH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9LAoKICBmaW5kQWxsOiBmdW5jdGlv bihpdGVyYXRvciwgY29udGV4dCkgewogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAg IHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgaWYgKGl0 ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4KSkKICAgICAgICByZXN1 bHRzLnB1c2godmFsdWUpOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0czsKICB9 LAoKICBncmVwOiBmdW5jdGlvbihmaWx0ZXIsIGl0ZXJhdG9yLCBjb250ZXh0KSB7 CiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LOwogICAgdmFy IHJlc3VsdHMgPSBbXTsKCiAgICBpZiAoT2JqZWN0LmlzU3RyaW5nKGZpbHRlcikp CiAgICAgIGZpbHRlciA9IG5ldyBSZWdFeHAoZmlsdGVyKTsKCiAgICB0aGlzLmVh Y2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIGlmIChmaWx0ZXIubWF0 Y2godmFsdWUpKQogICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvci5jYWxsKGNv bnRleHQsIHZhbHVlLCBpbmRleCkpOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0 czsKICB9LAoKICBpbmNsdWRlOiBmdW5jdGlvbihvYmplY3QpIHsKICAgIGlmIChP YmplY3QuaXNGdW5jdGlvbih0aGlzLmluZGV4T2YpKQogICAgICBpZiAodGhpcy5p bmRleE9mKG9iamVjdCkgIT0gLTEpIHJldHVybiB0cnVlOwoKICAgIHZhciBmb3Vu ZCA9IGZhbHNlOwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAg IGlmICh2YWx1ZSA9PSBvYmplY3QpIHsKICAgICAgICBmb3VuZCA9IHRydWU7CiAg ICAgICAgdGhyb3cgJGJyZWFrOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBm b3VuZDsKICB9LAoKICBpbkdyb3Vwc09mOiBmdW5jdGlvbihudW1iZXIsIGZpbGxX aXRoKSB7CiAgICBmaWxsV2l0aCA9IE9iamVjdC5pc1VuZGVmaW5lZChmaWxsV2l0 aCkgPyBudWxsIDogZmlsbFdpdGg7CiAgICByZXR1cm4gdGhpcy5lYWNoU2xpY2Uo bnVtYmVyLCBmdW5jdGlvbihzbGljZSkgewogICAgICB3aGlsZShzbGljZS5sZW5n dGggPCBudW1iZXIpIHNsaWNlLnB1c2goZmlsbFdpdGgpOwogICAgICByZXR1cm4g c2xpY2U7CiAgICB9KTsKICB9LAoKICBpbmplY3Q6IGZ1bmN0aW9uKG1lbW8sIGl0 ZXJhdG9yLCBjb250ZXh0KSB7CiAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUs IGluZGV4KSB7CiAgICAgIG1lbW8gPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG1l bW8sIHZhbHVlLCBpbmRleCk7CiAgICB9KTsKICAgIHJldHVybiBtZW1vOwogIH0s CgogIGludm9rZTogZnVuY3Rpb24obWV0aG9kKSB7CiAgICB2YXIgYXJncyA9ICRB KGFyZ3VtZW50cykuc2xpY2UoMSk7CiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rp b24odmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlW21ldGhvZF0uYXBwbHkodmFs dWUsIGFyZ3MpOwogICAgfSk7CiAgfSwKCiAgbWF4OiBmdW5jdGlvbihpdGVyYXRv ciwgY29udGV4dCkgewogICAgaXRlcmF0b3IgPSBpdGVyYXRvciB8fCBQcm90b3R5 cGUuSzsKICAgIHZhciByZXN1bHQ7CiAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFs dWUsIGluZGV4KSB7CiAgICAgIHZhbHVlID0gaXRlcmF0b3IuY2FsbChjb250ZXh0 LCB2YWx1ZSwgaW5kZXgpOwogICAgICBpZiAocmVzdWx0ID09IG51bGwgfHwgdmFs dWUgPj0gcmVzdWx0KQogICAgICAgIHJlc3VsdCA9IHZhbHVlOwogICAgfSk7CiAg ICByZXR1cm4gcmVzdWx0OwogIH0sCgogIG1pbjogZnVuY3Rpb24oaXRlcmF0b3Is IGNvbnRleHQpIHsKICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgfHwgUHJvdG90eXBl Lks7CiAgICB2YXIgcmVzdWx0OwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVl LCBpbmRleCkgewogICAgICB2YWx1ZSA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwg dmFsdWUsIGluZGV4KTsKICAgICAgaWYgKHJlc3VsdCA9PSBudWxsIHx8IHZhbHVl IDwgcmVzdWx0KQogICAgICAgIHJlc3VsdCA9IHZhbHVlOwogICAgfSk7CiAgICBy ZXR1cm4gcmVzdWx0OwogIH0sCgogIHBhcnRpdGlvbjogZnVuY3Rpb24oaXRlcmF0 b3IsIGNvbnRleHQpIHsKICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgfHwgUHJvdG90 eXBlLks7CiAgICB2YXIgdHJ1ZXMgPSBbXSwgZmFsc2VzID0gW107CiAgICB0aGlz LmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIChpdGVyYXRvci5j YWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCkgPwogICAgICAgIHRydWVzIDogZmFs c2VzKS5wdXNoKHZhbHVlKTsKICAgIH0pOwogICAgcmV0dXJuIFt0cnVlcywgZmFs c2VzXTsKICB9LAoKICBwbHVjazogZnVuY3Rpb24ocHJvcGVydHkpIHsKICAgIHZh ciByZXN1bHRzID0gW107CiAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUpIHsK ICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlW3Byb3BlcnR5XSk7CiAgICB9KTsKICAg IHJldHVybiByZXN1bHRzOwogIH0sCgogIHJlamVjdDogZnVuY3Rpb24oaXRlcmF0 b3IsIGNvbnRleHQpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB0aGlzLmVh Y2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIGlmICghaXRlcmF0b3Iu Y2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgpKQogICAgICAgIHJlc3VsdHMucHVz aCh2YWx1ZSk7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHRzOwogIH0sCgogIHNv cnRCeTogZnVuY3Rpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKICAgIHJldHVybiB0 aGlzLm1hcChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgcmV0dXJuIHsK ICAgICAgICB2YWx1ZTogdmFsdWUsCiAgICAgICAgY3JpdGVyaWE6IGl0ZXJhdG9y LmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4KQogICAgICB9OwogICAgfSkuc29y dChmdW5jdGlvbihsZWZ0LCByaWdodCkgewogICAgICB2YXIgYSA9IGxlZnQuY3Jp dGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTsKICAgICAgcmV0dXJuIGEgPCBiID8g LTEgOiBhID4gYiA/IDEgOiAwOwogICAgfSkucGx1Y2soJ3ZhbHVlJyk7CiAgfSwK CiAgdG9BcnJheTogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5tYXAoKTsK ICB9LAoKICB6aXA6IGZ1bmN0aW9uKCkgewogICAgdmFyIGl0ZXJhdG9yID0gUHJv dG90eXBlLkssIGFyZ3MgPSAkQShhcmd1bWVudHMpOwogICAgaWYgKE9iamVjdC5p c0Z1bmN0aW9uKGFyZ3MubGFzdCgpKSkKICAgICAgaXRlcmF0b3IgPSBhcmdzLnBv cCgpOwoKICAgIHZhciBjb2xsZWN0aW9ucyA9IFt0aGlzXS5jb25jYXQoYXJncyku bWFwKCRBKTsKICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSwgaW5k ZXgpIHsKICAgICAgcmV0dXJuIGl0ZXJhdG9yKGNvbGxlY3Rpb25zLnBsdWNrKGlu ZGV4KSk7CiAgICB9KTsKICB9LAoKICBzaXplOiBmdW5jdGlvbigpIHsKICAgIHJl dHVybiB0aGlzLnRvQXJyYXkoKS5sZW5ndGg7CiAgfSwKCiAgaW5zcGVjdDogZnVu Y3Rpb24oKSB7CiAgICByZXR1cm4gJyM8RW51bWVyYWJsZTonICsgdGhpcy50b0Fy cmF5KCkuaW5zcGVjdCgpICsgJz4nOwogIH0KfTsKCk9iamVjdC5leHRlbmQoRW51 bWVyYWJsZSwgewogIG1hcDogICAgIEVudW1lcmFibGUuY29sbGVjdCwKICBmaW5k OiAgICBFbnVtZXJhYmxlLmRldGVjdCwKICBzZWxlY3Q6ICBFbnVtZXJhYmxlLmZp bmRBbGwsCiAgZmlsdGVyOiAgRW51bWVyYWJsZS5maW5kQWxsLAogIG1lbWJlcjog IEVudW1lcmFibGUuaW5jbHVkZSwKICBlbnRyaWVzOiBFbnVtZXJhYmxlLnRvQXJy YXksCiAgZXZlcnk6ICAgRW51bWVyYWJsZS5hbGwsCiAgc29tZTogICAgRW51bWVy YWJsZS5hbnkKfSk7CmZ1bmN0aW9uICRBKGl0ZXJhYmxlKSB7CiAgaWYgKCFpdGVy YWJsZSkgcmV0dXJuIFtdOwogIGlmIChpdGVyYWJsZS50b0FycmF5KSByZXR1cm4g aXRlcmFibGUudG9BcnJheSgpOwogIHZhciBsZW5ndGggPSBpdGVyYWJsZS5sZW5n dGggfHwgMCwgcmVzdWx0cyA9IG5ldyBBcnJheShsZW5ndGgpOwogIHdoaWxlIChs ZW5ndGgtLSkgcmVzdWx0c1tsZW5ndGhdID0gaXRlcmFibGVbbGVuZ3RoXTsKICBy ZXR1cm4gcmVzdWx0czsKfQoKaWYgKFByb3RvdHlwZS5Ccm93c2VyLldlYktpdCkg ewogICRBID0gZnVuY3Rpb24oaXRlcmFibGUpIHsKICAgIGlmICghaXRlcmFibGUp IHJldHVybiBbXTsKICAgIC8vIEluIFNhZmFyaSwgb25seSB1c2UgdGhlIGB0b0Fy cmF5YCBtZXRob2QgaWYgaXQncyBub3QgYSBOb2RlTGlzdC4KICAgIC8vIEEgTm9k ZUxpc3QgaXMgYSBmdW5jdGlvbiwgaGFzIGFuIGZ1bmN0aW9uIGBpdGVtYCBwcm9w ZXJ0eSwgYW5kIGEgbnVtZXJpYwogICAgLy8gYGxlbmd0aGAgcHJvcGVydHkuIEFk YXB0ZWQgZnJvbSBHb29nbGUgRG9jdHlwZS4KICAgIGlmICghKHR5cGVvZiBpdGVy YWJsZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaXRlcmFibGUubGVuZ3RoID09 PQogICAgICAgICdudW1iZXInICYmIHR5cGVvZiBpdGVyYWJsZS5pdGVtID09PSAn ZnVuY3Rpb24nKSAmJiBpdGVyYWJsZS50b0FycmF5KQogICAgICByZXR1cm4gaXRl cmFibGUudG9BcnJheSgpOwogICAgdmFyIGxlbmd0aCA9IGl0ZXJhYmxlLmxlbmd0 aCB8fCAwLCByZXN1bHRzID0gbmV3IEFycmF5KGxlbmd0aCk7CiAgICB3aGlsZSAo bGVuZ3RoLS0pIHJlc3VsdHNbbGVuZ3RoXSA9IGl0ZXJhYmxlW2xlbmd0aF07CiAg ICByZXR1cm4gcmVzdWx0czsKICB9Owp9CgpBcnJheS5mcm9tID0gJEE7CgpPYmpl Y3QuZXh0ZW5kKEFycmF5LnByb3RvdHlwZSwgRW51bWVyYWJsZSk7CgppZiAoIUFy cmF5LnByb3RvdHlwZS5fcmV2ZXJzZSkgQXJyYXkucHJvdG90eXBlLl9yZXZlcnNl ID0gQXJyYXkucHJvdG90eXBlLnJldmVyc2U7CgpPYmplY3QuZXh0ZW5kKEFycmF5 LnByb3RvdHlwZSwgewogIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikgewogICAg Zm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHRoaXMubGVuZ3RoOyBpIDwgbGVuZ3Ro OyBpKyspCiAgICAgIGl0ZXJhdG9yKHRoaXNbaV0pOwogIH0sCgogIGNsZWFyOiBm dW5jdGlvbigpIHsKICAgIHRoaXMubGVuZ3RoID0gMDsKICAgIHJldHVybiB0aGlz OwogIH0sCgogIGZpcnN0OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzWzBd OwogIH0sCgogIGxhc3Q6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXNbdGhp cy5sZW5ndGggLSAxXTsKICB9LAoKICBjb21wYWN0OiBmdW5jdGlvbigpIHsKICAg IHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbih2YWx1ZSkgewogICAgICByZXR1 cm4gdmFsdWUgIT0gbnVsbDsKICAgIH0pOwogIH0sCgogIGZsYXR0ZW46IGZ1bmN0 aW9uKCkgewogICAgcmV0dXJuIHRoaXMuaW5qZWN0KFtdLCBmdW5jdGlvbihhcnJh eSwgdmFsdWUpIHsKICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdChPYmplY3QuaXNB cnJheSh2YWx1ZSkgPwogICAgICAgIHZhbHVlLmZsYXR0ZW4oKSA6IFt2YWx1ZV0p OwogICAgfSk7CiAgfSwKCiAgd2l0aG91dDogZnVuY3Rpb24oKSB7CiAgICB2YXIg dmFsdWVzID0gJEEoYXJndW1lbnRzKTsKICAgIHJldHVybiB0aGlzLnNlbGVjdChm dW5jdGlvbih2YWx1ZSkgewogICAgICByZXR1cm4gIXZhbHVlcy5pbmNsdWRlKHZh bHVlKTsKICAgIH0pOwogIH0sCgogIHJldmVyc2U6IGZ1bmN0aW9uKGlubGluZSkg ewogICAgcmV0dXJuIChpbmxpbmUgIT09IGZhbHNlID8gdGhpcyA6IHRoaXMudG9B cnJheSgpKS5fcmV2ZXJzZSgpOwogIH0sCgogIHJlZHVjZTogZnVuY3Rpb24oKSB7 CiAgICByZXR1cm4gdGhpcy5sZW5ndGggPiAxID8gdGhpcyA6IHRoaXNbMF07CiAg fSwKCiAgdW5pcTogZnVuY3Rpb24oc29ydGVkKSB7CiAgICByZXR1cm4gdGhpcy5p bmplY3QoW10sIGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSwgaW5kZXgpIHsKICAgICAg aWYgKDAgPT0gaW5kZXggfHwgKHNvcnRlZCA/IGFycmF5Lmxhc3QoKSAhPSB2YWx1 ZSA6ICFhcnJheS5pbmNsdWRlKHZhbHVlKSkpCiAgICAgICAgYXJyYXkucHVzaCh2 YWx1ZSk7CiAgICAgIHJldHVybiBhcnJheTsKICAgIH0pOwogIH0sCgogIGludGVy c2VjdDogZnVuY3Rpb24oYXJyYXkpIHsKICAgIHJldHVybiB0aGlzLnVuaXEoKS5m aW5kQWxsKGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgcmV0dXJuIGFycmF5LmRldGVj dChmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gaXRlbSA9PT0gdmFsdWUgfSk7CiAg ICB9KTsKICB9LAoKICBjbG9uZTogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gW10u Y29uY2F0KHRoaXMpOwogIH0sCgogIHNpemU6IGZ1bmN0aW9uKCkgewogICAgcmV0 dXJuIHRoaXMubGVuZ3RoOwogIH0sCgogIGluc3BlY3Q6IGZ1bmN0aW9uKCkgewog ICAgcmV0dXJuICdbJyArIHRoaXMubWFwKE9iamVjdC5pbnNwZWN0KS5qb2luKCcs ICcpICsgJ10nOwogIH0sCgogIHRvSlNPTjogZnVuY3Rpb24oKSB7CiAgICB2YXIg cmVzdWx0cyA9IFtdOwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKG9iamVjdCkgewog ICAgICB2YXIgdmFsdWUgPSBPYmplY3QudG9KU09OKG9iamVjdCk7CiAgICAgIGlm ICghT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkgcmVzdWx0cy5wdXNoKHZhbHVl KTsKICAgIH0pOwogICAgcmV0dXJuICdbJyArIHJlc3VsdHMuam9pbignLCAnKSAr ICddJzsKICB9Cn0pOwoKLy8gdXNlIG5hdGl2ZSBicm93c2VyIEpTIDEuNiBpbXBs ZW1lbnRhdGlvbiBpZiBhdmFpbGFibGUKaWYgKE9iamVjdC5pc0Z1bmN0aW9uKEFy cmF5LnByb3RvdHlwZS5mb3JFYWNoKSkKICBBcnJheS5wcm90b3R5cGUuX2VhY2gg PSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaDsKCmlmICghQXJyYXkucHJvdG90eXBl LmluZGV4T2YpIEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24oaXRl bSwgaSkgewogIGkgfHwgKGkgPSAwKTsKICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5n dGg7CiAgaWYgKGkgPCAwKSBpID0gbGVuZ3RoICsgaTsKICBmb3IgKDsgaSA8IGxl bmd0aDsgaSsrKQogICAgaWYgKHRoaXNbaV0gPT09IGl0ZW0pIHJldHVybiBpOwog IHJldHVybiAtMTsKfTsKCmlmICghQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9m KSBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbihpdGVtLCBp KSB7CiAgaSA9IGlzTmFOKGkpID8gdGhpcy5sZW5ndGggOiAoaSA8IDAgPyB0aGlz Lmxlbmd0aCArIGkgOiBpKSArIDE7CiAgdmFyIG4gPSB0aGlzLnNsaWNlKDAsIGkp LnJldmVyc2UoKS5pbmRleE9mKGl0ZW0pOwogIHJldHVybiAobiA8IDApID8gbiA6 IGkgLSBuIC0gMTsKfTsKCkFycmF5LnByb3RvdHlwZS50b0FycmF5ID0gQXJyYXku cHJvdG90eXBlLmNsb25lOwoKZnVuY3Rpb24gJHcoc3RyaW5nKSB7CiAgaWYgKCFP YmplY3QuaXNTdHJpbmcoc3RyaW5nKSkgcmV0dXJuIFtdOwogIHN0cmluZyA9IHN0 cmluZy5zdHJpcCgpOwogIHJldHVybiBzdHJpbmcgPyBzdHJpbmcuc3BsaXQoL1xz Ky8pIDogW107Cn0KCmlmIChQcm90b3R5cGUuQnJvd3Nlci5PcGVyYSl7CiAgQXJy YXkucHJvdG90eXBlLmNvbmNhdCA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGFycmF5 ID0gW107CiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gdGhpcy5sZW5ndGg7 IGkgPCBsZW5ndGg7IGkrKykgYXJyYXkucHVzaCh0aGlzW2ldKTsKICAgIGZvciAo dmFyIGkgPSAwLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3Ro OyBpKyspIHsKICAgICAgaWYgKE9iamVjdC5pc0FycmF5KGFyZ3VtZW50c1tpXSkp IHsKICAgICAgICBmb3IgKHZhciBqID0gMCwgYXJyYXlMZW5ndGggPSBhcmd1bWVu dHNbaV0ubGVuZ3RoOyBqIDwgYXJyYXlMZW5ndGg7IGorKykKICAgICAgICAgIGFy cmF5LnB1c2goYXJndW1lbnRzW2ldW2pdKTsKICAgICAgfSBlbHNlIHsKICAgICAg ICBhcnJheS5wdXNoKGFyZ3VtZW50c1tpXSk7CiAgICAgIH0KICAgIH0KICAgIHJl dHVybiBhcnJheTsKICB9Owp9Ck9iamVjdC5leHRlbmQoTnVtYmVyLnByb3RvdHlw ZSwgewogIHRvQ29sb3JQYXJ0OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlz LnRvUGFkZGVkU3RyaW5nKDIsIDE2KTsKICB9LAoKICBzdWNjOiBmdW5jdGlvbigp IHsKICAgIHJldHVybiB0aGlzICsgMTsKICB9LAoKICB0aW1lczogZnVuY3Rpb24o aXRlcmF0b3IsIGNvbnRleHQpIHsKICAgICRSKDAsIHRoaXMsIHRydWUpLmVhY2go aXRlcmF0b3IsIGNvbnRleHQpOwogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgdG9Q YWRkZWRTdHJpbmc6IGZ1bmN0aW9uKGxlbmd0aCwgcmFkaXgpIHsKICAgIHZhciBz dHJpbmcgPSB0aGlzLnRvU3RyaW5nKHJhZGl4IHx8IDEwKTsKICAgIHJldHVybiAn MCcudGltZXMobGVuZ3RoIC0gc3RyaW5nLmxlbmd0aCkgKyBzdHJpbmc7CiAgfSwK CiAgdG9KU09OOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBpc0Zpbml0ZSh0aGlz KSA/IHRoaXMudG9TdHJpbmcoKSA6ICdudWxsJzsKICB9Cn0pOwoKJHcoJ2FicyBy b3VuZCBjZWlsIGZsb29yJykuZWFjaChmdW5jdGlvbihtZXRob2QpewogIE51bWJl ci5wcm90b3R5cGVbbWV0aG9kXSA9IE1hdGhbbWV0aG9kXS5tZXRob2RpemUoKTsK fSk7CmZ1bmN0aW9uICRIKG9iamVjdCkgewogIHJldHVybiBuZXcgSGFzaChvYmpl Y3QpOwp9OwoKdmFyIEhhc2ggPSBDbGFzcy5jcmVhdGUoRW51bWVyYWJsZSwgKGZ1 bmN0aW9uKCkgewoKICBmdW5jdGlvbiB0b1F1ZXJ5UGFpcihrZXksIHZhbHVlKSB7 CiAgICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuIGtleTsK ICAgIHJldHVybiBrZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5n LmludGVycHJldCh2YWx1ZSkpOwogIH0KCiAgcmV0dXJuIHsKICAgIGluaXRpYWxp emU6IGZ1bmN0aW9uKG9iamVjdCkgewogICAgICB0aGlzLl9vYmplY3QgPSBPYmpl Y3QuaXNIYXNoKG9iamVjdCkgPyBvYmplY3QudG9PYmplY3QoKSA6IE9iamVjdC5j bG9uZShvYmplY3QpOwogICAgfSwKCiAgICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0 b3IpIHsKICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuX29iamVjdCkgewogICAg ICAgIHZhciB2YWx1ZSA9IHRoaXMuX29iamVjdFtrZXldLCBwYWlyID0gW2tleSwg dmFsdWVdOwogICAgICAgIHBhaXIua2V5ID0ga2V5OwogICAgICAgIHBhaXIudmFs dWUgPSB2YWx1ZTsKICAgICAgICBpdGVyYXRvcihwYWlyKTsKICAgICAgfQogICAg fSwKCiAgICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKICAgICAgcmV0dXJu IHRoaXMuX29iamVjdFtrZXldID0gdmFsdWU7CiAgICB9LAoKICAgIGdldDogZnVu Y3Rpb24oa2V5KSB7CiAgICAgIC8vIHNpbXVsYXRpbmcgcG9vcmx5IHN1cHBvcnRl ZCBoYXNPd25Qcm9wZXJ0eQogICAgICBpZiAodGhpcy5fb2JqZWN0W2tleV0gIT09 IE9iamVjdC5wcm90b3R5cGVba2V5XSkKICAgICAgICByZXR1cm4gdGhpcy5fb2Jq ZWN0W2tleV07CiAgICB9LAoKICAgIHVuc2V0OiBmdW5jdGlvbihrZXkpIHsKICAg ICAgdmFyIHZhbHVlID0gdGhpcy5fb2JqZWN0W2tleV07CiAgICAgIGRlbGV0ZSB0 aGlzLl9vYmplY3Rba2V5XTsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfSwKCiAg ICB0b09iamVjdDogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBPYmplY3QuY2xv bmUodGhpcy5fb2JqZWN0KTsKICAgIH0sCgogICAga2V5czogZnVuY3Rpb24oKSB7 CiAgICAgIHJldHVybiB0aGlzLnBsdWNrKCdrZXknKTsKICAgIH0sCgogICAgdmFs dWVzOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMucGx1Y2soJ3ZhbHVl Jyk7CiAgICB9LAoKICAgIGluZGV4OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICB2 YXIgbWF0Y2ggPSB0aGlzLmRldGVjdChmdW5jdGlvbihwYWlyKSB7CiAgICAgICAg cmV0dXJuIHBhaXIudmFsdWUgPT09IHZhbHVlOwogICAgICB9KTsKICAgICAgcmV0 dXJuIG1hdGNoICYmIG1hdGNoLmtleTsKICAgIH0sCgogICAgbWVyZ2U6IGZ1bmN0 aW9uKG9iamVjdCkgewogICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLnVwZGF0ZShv YmplY3QpOwogICAgfSwKCiAgICB1cGRhdGU6IGZ1bmN0aW9uKG9iamVjdCkgewog ICAgICByZXR1cm4gbmV3IEhhc2gob2JqZWN0KS5pbmplY3QodGhpcywgZnVuY3Rp b24ocmVzdWx0LCBwYWlyKSB7CiAgICAgICAgcmVzdWx0LnNldChwYWlyLmtleSwg cGFpci52YWx1ZSk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfSk7CiAg ICB9LAoKICAgIHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKCkgewogICAgICByZXR1 cm4gdGhpcy5pbmplY3QoW10sIGZ1bmN0aW9uKHJlc3VsdHMsIHBhaXIpIHsKICAg ICAgICB2YXIga2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhaXIua2V5KSwgdmFs dWVzID0gcGFpci52YWx1ZTsKCiAgICAgICAgaWYgKHZhbHVlcyAmJiB0eXBlb2Yg dmFsdWVzID09ICdvYmplY3QnKSB7CiAgICAgICAgICBpZiAoT2JqZWN0LmlzQXJy YXkodmFsdWVzKSkKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMuY29uY2F0KHZh bHVlcy5tYXAodG9RdWVyeVBhaXIuY3Vycnkoa2V5KSkpOwogICAgICAgIH0gZWxz ZSByZXN1bHRzLnB1c2godG9RdWVyeVBhaXIoa2V5LCB2YWx1ZXMpKTsKICAgICAg ICByZXR1cm4gcmVzdWx0czsKICAgICAgfSkuam9pbignJicpOwogICAgfSwKCiAg ICBpbnNwZWN0OiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuICcjPEhhc2g6eycg KyB0aGlzLm1hcChmdW5jdGlvbihwYWlyKSB7CiAgICAgICAgcmV0dXJuIHBhaXIu bWFwKE9iamVjdC5pbnNwZWN0KS5qb2luKCc6ICcpOwogICAgICB9KS5qb2luKCcs ICcpICsgJ30+JzsKICAgIH0sCgogICAgdG9KU09OOiBmdW5jdGlvbigpIHsKICAg ICAgcmV0dXJuIE9iamVjdC50b0pTT04odGhpcy50b09iamVjdCgpKTsKICAgIH0s CgogICAgY2xvbmU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gbmV3IEhhc2go dGhpcyk7CiAgICB9CiAgfQp9KSgpKTsKCkhhc2gucHJvdG90eXBlLnRvVGVtcGxh dGVSZXBsYWNlbWVudHMgPSBIYXNoLnByb3RvdHlwZS50b09iamVjdDsKSGFzaC5m cm9tID0gJEg7CnZhciBPYmplY3RSYW5nZSA9IENsYXNzLmNyZWF0ZShFbnVtZXJh YmxlLCB7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oc3RhcnQsIGVuZCwgZXhjbHVz aXZlKSB7CiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7CiAgICB0aGlzLmVuZCA9IGVu ZDsKICAgIHRoaXMuZXhjbHVzaXZlID0gZXhjbHVzaXZlOwogIH0sCgogIF9lYWNo OiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgdmFyIHZhbHVlID0gdGhpcy5zdGFy dDsKICAgIHdoaWxlICh0aGlzLmluY2x1ZGUodmFsdWUpKSB7CiAgICAgIGl0ZXJh dG9yKHZhbHVlKTsKICAgICAgdmFsdWUgPSB2YWx1ZS5zdWNjKCk7CiAgICB9CiAg fSwKCiAgaW5jbHVkZTogZnVuY3Rpb24odmFsdWUpIHsKICAgIGlmICh2YWx1ZSA8 IHRoaXMuc3RhcnQpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICh0aGlzLmV4 Y2x1c2l2ZSkKICAgICAgcmV0dXJuIHZhbHVlIDwgdGhpcy5lbmQ7CiAgICByZXR1 cm4gdmFsdWUgPD0gdGhpcy5lbmQ7CiAgfQp9KTsKCnZhciAkUiA9IGZ1bmN0aW9u KHN0YXJ0LCBlbmQsIGV4Y2x1c2l2ZSkgewogIHJldHVybiBuZXcgT2JqZWN0UmFu Z2Uoc3RhcnQsIGVuZCwgZXhjbHVzaXZlKTsKfTsKCnZhciBBamF4ID0gewogIGdl dFRyYW5zcG9ydDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gVHJ5LnRoZXNlKAog ICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCl9LAog ICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1s Mi5YTUxIVFRQJyl9LAogICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3IEFjdGl2 ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyl9CiAgICApIHx8IGZhbHNlOwog IH0sCgogIGFjdGl2ZVJlcXVlc3RDb3VudDogMAp9OwoKQWpheC5SZXNwb25kZXJz ID0gewogIHJlc3BvbmRlcnM6IFtdLAoKICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0 b3IpIHsKICAgIHRoaXMucmVzcG9uZGVycy5fZWFjaChpdGVyYXRvcik7CiAgfSwK CiAgcmVnaXN0ZXI6IGZ1bmN0aW9uKHJlc3BvbmRlcikgewogICAgaWYgKCF0aGlz LmluY2x1ZGUocmVzcG9uZGVyKSkKICAgICAgdGhpcy5yZXNwb25kZXJzLnB1c2go cmVzcG9uZGVyKTsKICB9LAoKICB1bnJlZ2lzdGVyOiBmdW5jdGlvbihyZXNwb25k ZXIpIHsKICAgIHRoaXMucmVzcG9uZGVycyA9IHRoaXMucmVzcG9uZGVycy53aXRo b3V0KHJlc3BvbmRlcik7CiAgfSwKCiAgZGlzcGF0Y2g6IGZ1bmN0aW9uKGNhbGxi YWNrLCByZXF1ZXN0LCB0cmFuc3BvcnQsIGpzb24pIHsKICAgIHRoaXMuZWFjaChm dW5jdGlvbihyZXNwb25kZXIpIHsKICAgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9u KHJlc3BvbmRlcltjYWxsYmFja10pKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAg IHJlc3BvbmRlcltjYWxsYmFja10uYXBwbHkocmVzcG9uZGVyLCBbcmVxdWVzdCwg dHJhbnNwb3J0LCBqc29uXSk7CiAgICAgICAgfSBjYXRjaCAoZSkgeyB9CiAgICAg IH0KICAgIH0pOwogIH0KfTsKCk9iamVjdC5leHRlbmQoQWpheC5SZXNwb25kZXJz LCBFbnVtZXJhYmxlKTsKCkFqYXguUmVzcG9uZGVycy5yZWdpc3Rlcih7CiAgb25D cmVhdGU6ICAgZnVuY3Rpb24oKSB7IEFqYXguYWN0aXZlUmVxdWVzdENvdW50Kysg fSwKICBvbkNvbXBsZXRlOiBmdW5jdGlvbigpIHsgQWpheC5hY3RpdmVSZXF1ZXN0 Q291bnQtLSB9Cn0pOwoKQWpheC5CYXNlID0gQ2xhc3MuY3JlYXRlKHsKICBpbml0 aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLm9wdGlvbnMgPSB7 CiAgICAgIG1ldGhvZDogICAgICAgJ3Bvc3QnLAogICAgICBhc3luY2hyb25vdXM6 IHRydWUsCiAgICAgIGNvbnRlbnRUeXBlOiAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZv cm0tdXJsZW5jb2RlZCcsCiAgICAgIGVuY29kaW5nOiAgICAgJ1VURi04JywKICAg ICAgcGFyYW1ldGVyczogICAnJywKICAgICAgZXZhbEpTT046ICAgICB0cnVlLAog ICAgICBldmFsSlM6ICAgICAgIHRydWUKICAgIH07CiAgICBPYmplY3QuZXh0ZW5k KHRoaXMub3B0aW9ucywgb3B0aW9ucyB8fCB7IH0pOwoKICAgIHRoaXMub3B0aW9u cy5tZXRob2QgPSB0aGlzLm9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7Cgog ICAgaWYgKE9iamVjdC5pc1N0cmluZyh0aGlzLm9wdGlvbnMucGFyYW1ldGVycykp CiAgICAgIHRoaXMub3B0aW9ucy5wYXJhbWV0ZXJzID0gdGhpcy5vcHRpb25zLnBh cmFtZXRlcnMudG9RdWVyeVBhcmFtcygpOwogICAgZWxzZSBpZiAoT2JqZWN0Lmlz SGFzaCh0aGlzLm9wdGlvbnMucGFyYW1ldGVycykpCiAgICAgIHRoaXMub3B0aW9u cy5wYXJhbWV0ZXJzID0gdGhpcy5vcHRpb25zLnBhcmFtZXRlcnMudG9PYmplY3Qo KTsKICB9Cn0pOwoKQWpheC5SZXF1ZXN0ID0gQ2xhc3MuY3JlYXRlKEFqYXguQmFz ZSwgewogIF9jb21wbGV0ZTogZmFsc2UsCgogIGluaXRpYWxpemU6IGZ1bmN0aW9u KCRzdXBlciwgdXJsLCBvcHRpb25zKSB7CiAgICAkc3VwZXIob3B0aW9ucyk7CiAg ICB0aGlzLnRyYW5zcG9ydCA9IEFqYXguZ2V0VHJhbnNwb3J0KCk7CiAgICB0aGlz LnJlcXVlc3QodXJsKTsKICB9LAoKICByZXF1ZXN0OiBmdW5jdGlvbih1cmwpIHsK ICAgIHRoaXMudXJsID0gdXJsOwogICAgdGhpcy5tZXRob2QgPSB0aGlzLm9wdGlv bnMubWV0aG9kOwogICAgdmFyIHBhcmFtcyA9IE9iamVjdC5jbG9uZSh0aGlzLm9w dGlvbnMucGFyYW1ldGVycyk7CgogICAgaWYgKCFbJ2dldCcsICdwb3N0J10uaW5j bHVkZSh0aGlzLm1ldGhvZCkpIHsKICAgICAgLy8gc2ltdWxhdGUgb3RoZXIgdmVy YnMgb3ZlciBwb3N0CiAgICAgIHBhcmFtc1snX21ldGhvZCddID0gdGhpcy5tZXRo b2Q7CiAgICAgIHRoaXMubWV0aG9kID0gJ3Bvc3QnOwogICAgfQoKICAgIHRoaXMu cGFyYW1ldGVycyA9IHBhcmFtczsKCgogICAgaWYgKHBhcmFtcyA9IE9iamVjdC50 b1F1ZXJ5U3RyaW5nKHBhcmFtcykpIHsKICAgICAgLy8gd2hlbiBHRVQsIGFwcGVu ZCBwYXJhbWV0ZXJzIHRvIFVSTAogICAgICBpZiAodGhpcy5tZXRob2QgPT0gJ2dl dCcpCiAgICAgICAgdGhpcy51cmwgKz0gKHRoaXMudXJsLmluY2x1ZGUoJz8nKSA/ ICcmJyA6ICc/JykgKyBwYXJhbXM7CiAgICAgIGVsc2UgaWYgKC9Lb25xdWVyb3J8 U2FmYXJpfEtIVE1MLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKQogICAgICAg IHBhcmFtcyArPSAnJl89JzsKICAgIH0KCiAgICB0cnkgewogICAgICB2YXIgcmVz cG9uc2UgPSBuZXcgQWpheC5SZXNwb25zZSh0aGlzKTsKICAgICAgaWYgKHRoaXMu b3B0aW9ucy5vbkNyZWF0ZSkgdGhpcy5vcHRpb25zLm9uQ3JlYXRlKHJlc3BvbnNl KTsKICAgICAgQWpheC5SZXNwb25kZXJzLmRpc3BhdGNoKCdvbkNyZWF0ZScsIHRo aXMsIHJlc3BvbnNlKTsKCiAgICAgIHRoaXMudHJhbnNwb3J0Lm9wZW4odGhpcy5t ZXRob2QudG9VcHBlckNhc2UoKSwgdGhpcy51cmwsCiAgICAgICAgdGhpcy5vcHRp b25zLmFzeW5jaHJvbm91cyk7CgogICAgICBpZiAodGhpcy5vcHRpb25zLmFzeW5j aHJvbm91cykgdGhpcy5yZXNwb25kVG9SZWFkeVN0YXRlLmJpbmQodGhpcykuZGVm ZXIoMSk7CgogICAgICB0aGlzLnRyYW5zcG9ydC5vbnJlYWR5c3RhdGVjaGFuZ2Ug PSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKTsKICAgICAgdGhpcy5zZXRS ZXF1ZXN0SGVhZGVycygpOwoKICAgICAgdGhpcy5ib2R5ID0gdGhpcy5tZXRob2Qg PT0gJ3Bvc3QnID8gKHRoaXMub3B0aW9ucy5wb3N0Qm9keSB8fCBwYXJhbXMpIDog bnVsbDsKICAgICAgdGhpcy50cmFuc3BvcnQuc2VuZCh0aGlzLmJvZHkpOwoKICAg ICAgLyogRm9yY2UgRmlyZWZveCB0byBoYW5kbGUgcmVhZHkgc3RhdGUgNCBmb3Ig c3luY2hyb25vdXMgcmVxdWVzdHMgKi8KICAgICAgaWYgKCF0aGlzLm9wdGlvbnMu YXN5bmNocm9ub3VzICYmIHRoaXMudHJhbnNwb3J0Lm92ZXJyaWRlTWltZVR5cGUp CiAgICAgICAgdGhpcy5vblN0YXRlQ2hhbmdlKCk7CgogICAgfQogICAgY2F0Y2gg KGUpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV4Y2VwdGlvbihlKTsKICAgIH0KICB9 LAoKICBvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpIHsKICAgIHZhciByZWFkeVN0 YXRlID0gdGhpcy50cmFuc3BvcnQucmVhZHlTdGF0ZTsKICAgIGlmIChyZWFkeVN0 YXRlID4gMSAmJiAhKChyZWFkeVN0YXRlID09IDQpICYmIHRoaXMuX2NvbXBsZXRl KSkKICAgICAgdGhpcy5yZXNwb25kVG9SZWFkeVN0YXRlKHRoaXMudHJhbnNwb3J0 LnJlYWR5U3RhdGUpOwogIH0sCgogIHNldFJlcXVlc3RIZWFkZXJzOiBmdW5jdGlv bigpIHsKICAgIHZhciBoZWFkZXJzID0gewogICAgICAnWC1SZXF1ZXN0ZWQtV2l0 aCc6ICdYTUxIdHRwUmVxdWVzdCcsCiAgICAgICdYLVByb3RvdHlwZS1WZXJzaW9u JzogUHJvdG90eXBlLlZlcnNpb24sCiAgICAgICdBY2NlcHQnOiAndGV4dC9qYXZh c2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICov KicKICAgIH07CgogICAgaWYgKHRoaXMubWV0aG9kID09ICdwb3N0JykgewogICAg ICBoZWFkZXJzWydDb250ZW50LXR5cGUnXSA9IHRoaXMub3B0aW9ucy5jb250ZW50 VHlwZSArCiAgICAgICAgKHRoaXMub3B0aW9ucy5lbmNvZGluZyA/ICc7IGNoYXJz ZXQ9JyArIHRoaXMub3B0aW9ucy5lbmNvZGluZyA6ICcnKTsKCiAgICAgIC8qIEZv cmNlICJDb25uZWN0aW9uOiBjbG9zZSIgZm9yIG9sZGVyIE1vemlsbGEgYnJvd3Nl cnMgdG8gd29yawogICAgICAgKiBhcm91bmQgYSBidWcgd2hlcmUgWE1MSHR0cFJl cXVlc3Qgc2VuZHMgYW4gaW5jb3JyZWN0CiAgICAgICAqIENvbnRlbnQtbGVuZ3Ro IGhlYWRlci4gU2VlIE1vemlsbGEgQnVnemlsbGEgIzI0NjY1MS4KICAgICAgICov CiAgICAgIGlmICh0aGlzLnRyYW5zcG9ydC5vdmVycmlkZU1pbWVUeXBlICYmCiAg ICAgICAgICAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvR2Vja29cLyhcZHs0 fSkvKSB8fCBbMCwyMDA1XSlbMV0gPCAyMDA1KQogICAgICAgICAgICBoZWFkZXJz WydDb25uZWN0aW9uJ10gPSAnY2xvc2UnOwogICAgfQoKICAgIC8vIHVzZXItZGVm aW5lZCBoZWFkZXJzCiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5yZXF1ZXN0 SGVhZGVycyA9PSAnb2JqZWN0JykgewogICAgICB2YXIgZXh0cmFzID0gdGhpcy5v cHRpb25zLnJlcXVlc3RIZWFkZXJzOwoKICAgICAgaWYgKE9iamVjdC5pc0Z1bmN0 aW9uKGV4dHJhcy5wdXNoKSkKICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3Ro ID0gZXh0cmFzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAyKQogICAgICAgICAg aGVhZGVyc1tleHRyYXNbaV1dID0gZXh0cmFzW2krMV07CiAgICAgIGVsc2UKICAg ICAgICAkSChleHRyYXMpLmVhY2goZnVuY3Rpb24ocGFpcikgeyBoZWFkZXJzW3Bh aXIua2V5XSA9IHBhaXIudmFsdWUgfSk7CiAgICB9CgogICAgZm9yICh2YXIgbmFt ZSBpbiBoZWFkZXJzKQogICAgICB0aGlzLnRyYW5zcG9ydC5zZXRSZXF1ZXN0SGVh ZGVyKG5hbWUsIGhlYWRlcnNbbmFtZV0pOwogIH0sCgogIHN1Y2Nlc3M6IGZ1bmN0 aW9uKCkgewogICAgdmFyIHN0YXR1cyA9IHRoaXMuZ2V0U3RhdHVzKCk7CiAgICBy ZXR1cm4gIXN0YXR1cyB8fCAoc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAp OwogIH0sCgogIGdldFN0YXR1czogZnVuY3Rpb24oKSB7CiAgICB0cnkgewogICAg ICByZXR1cm4gdGhpcy50cmFuc3BvcnQuc3RhdHVzIHx8IDA7CiAgICB9IGNhdGNo IChlKSB7IHJldHVybiAwIH0KICB9LAoKICByZXNwb25kVG9SZWFkeVN0YXRlOiBm dW5jdGlvbihyZWFkeVN0YXRlKSB7CiAgICB2YXIgc3RhdGUgPSBBamF4LlJlcXVl c3QuRXZlbnRzW3JlYWR5U3RhdGVdLCByZXNwb25zZSA9IG5ldyBBamF4LlJlc3Bv bnNlKHRoaXMpOwoKICAgIGlmIChzdGF0ZSA9PSAnQ29tcGxldGUnKSB7CiAgICAg IHRyeSB7CiAgICAgICAgdGhpcy5fY29tcGxldGUgPSB0cnVlOwogICAgICAgICh0 aGlzLm9wdGlvbnNbJ29uJyArIHJlc3BvbnNlLnN0YXR1c10KICAgICAgICAgfHwg dGhpcy5vcHRpb25zWydvbicgKyAodGhpcy5zdWNjZXNzKCkgPyAnU3VjY2Vzcycg OiAnRmFpbHVyZScpXQogICAgICAgICB8fCBQcm90b3R5cGUuZW1wdHlGdW5jdGlv bikocmVzcG9uc2UsIHJlc3BvbnNlLmhlYWRlckpTT04pOwogICAgICB9IGNhdGNo IChlKSB7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV4Y2VwdGlvbihlKTsKICAgICAg fQoKICAgICAgdmFyIGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuZ2V0SGVhZGVyKCdD b250ZW50LXR5cGUnKTsKICAgICAgaWYgKHRoaXMub3B0aW9ucy5ldmFsSlMgPT0g J2ZvcmNlJwogICAgICAgICAgfHwgKHRoaXMub3B0aW9ucy5ldmFsSlMgJiYgdGhp cy5pc1NhbWVPcmlnaW4oKSAmJiBjb250ZW50VHlwZQogICAgICAgICAgJiYgY29u dGVudFR5cGUubWF0Y2goL15ccyoodGV4dHxhcHBsaWNhdGlvbilcLyh4LSk/KGph dmF8ZWNtYSlzY3JpcHQoOy4qKT9ccyokL2kpKSkKICAgICAgICB0aGlzLmV2YWxS ZXNwb25zZSgpOwogICAgfQoKICAgIHRyeSB7CiAgICAgICh0aGlzLm9wdGlvbnNb J29uJyArIHN0YXRlXSB8fCBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbikocmVzcG9u c2UsIHJlc3BvbnNlLmhlYWRlckpTT04pOwogICAgICBBamF4LlJlc3BvbmRlcnMu ZGlzcGF0Y2goJ29uJyArIHN0YXRlLCB0aGlzLCByZXNwb25zZSwgcmVzcG9uc2Uu aGVhZGVySlNPTik7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRoaXMuZGlzcGF0 Y2hFeGNlcHRpb24oZSk7CiAgICB9CgogICAgaWYgKHN0YXRlID09ICdDb21wbGV0 ZScpIHsKICAgICAgLy8gYXZvaWQgbWVtb3J5IGxlYWsgaW4gTVNJRTogY2xlYW4g dXAKICAgICAgdGhpcy50cmFuc3BvcnQub25yZWFkeXN0YXRlY2hhbmdlID0gUHJv dG90eXBlLmVtcHR5RnVuY3Rpb247CiAgICB9CiAgfSwKCiAgaXNTYW1lT3JpZ2lu OiBmdW5jdGlvbigpIHsKICAgIHZhciBtID0gdGhpcy51cmwubWF0Y2goL15ccypo dHRwcz86XC9cL1teXC9dKi8pOwogICAgcmV0dXJuICFtIHx8IChtWzBdID09ICcj e3Byb3RvY29sfS8vI3tkb21haW59I3twb3J0fScuaW50ZXJwb2xhdGUoewogICAg ICBwcm90b2NvbDogbG9jYXRpb24ucHJvdG9jb2wsCiAgICAgIGRvbWFpbjogZG9j dW1lbnQuZG9tYWluLAogICAgICBwb3J0OiBsb2NhdGlvbi5wb3J0ID8gJzonICsg bG9jYXRpb24ucG9ydCA6ICcnCiAgICB9KSk7CiAgfSwKCiAgZ2V0SGVhZGVyOiBm dW5jdGlvbihuYW1lKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gdGhpcy50cmFu c3BvcnQuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSkgfHwgbnVsbDsKICAgIH0gY2F0 Y2ggKGUpIHsgcmV0dXJuIG51bGwgfQogIH0sCgogIGV2YWxSZXNwb25zZTogZnVu Y3Rpb24oKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gZXZhbCgodGhpcy50cmFu c3BvcnQucmVzcG9uc2VUZXh0IHx8ICcnKS51bmZpbHRlckpTT04oKSk7CiAgICB9 IGNhdGNoIChlKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFeGNlcHRpb24oZSk7CiAg ICB9CiAgfSwKCiAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlv bikgewogICAgKHRoaXMub3B0aW9ucy5vbkV4Y2VwdGlvbiB8fCBQcm90b3R5cGUu ZW1wdHlGdW5jdGlvbikodGhpcywgZXhjZXB0aW9uKTsKICAgIEFqYXguUmVzcG9u ZGVycy5kaXNwYXRjaCgnb25FeGNlcHRpb24nLCB0aGlzLCBleGNlcHRpb24pOwog IH0KfSk7CgpBamF4LlJlcXVlc3QuRXZlbnRzID0KICBbJ1VuaW5pdGlhbGl6ZWQn LCAnTG9hZGluZycsICdMb2FkZWQnLCAnSW50ZXJhY3RpdmUnLCAnQ29tcGxldGUn XTsKCkFqYXguUmVzcG9uc2UgPSBDbGFzcy5jcmVhdGUoewogIGluaXRpYWxpemU6 IGZ1bmN0aW9uKHJlcXVlc3QpewogICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDsK ICAgIHZhciB0cmFuc3BvcnQgID0gdGhpcy50cmFuc3BvcnQgID0gcmVxdWVzdC50 cmFuc3BvcnQsCiAgICAgICAgcmVhZHlTdGF0ZSA9IHRoaXMucmVhZHlTdGF0ZSA9 IHRyYW5zcG9ydC5yZWFkeVN0YXRlOwoKICAgIGlmKChyZWFkeVN0YXRlID4gMiAm JiAhUHJvdG90eXBlLkJyb3dzZXIuSUUpIHx8IHJlYWR5U3RhdGUgPT0gNCkgewog ICAgICB0aGlzLnN0YXR1cyAgICAgICA9IHRoaXMuZ2V0U3RhdHVzKCk7CiAgICAg IHRoaXMuc3RhdHVzVGV4dCAgID0gdGhpcy5nZXRTdGF0dXNUZXh0KCk7CiAgICAg IHRoaXMucmVzcG9uc2VUZXh0ID0gU3RyaW5nLmludGVycHJldCh0cmFuc3BvcnQu cmVzcG9uc2VUZXh0KTsKICAgICAgdGhpcy5oZWFkZXJKU09OICAgPSB0aGlzLl9n ZXRIZWFkZXJKU09OKCk7CiAgICB9CgogICAgaWYocmVhZHlTdGF0ZSA9PSA0KSB7 CiAgICAgIHZhciB4bWwgPSB0cmFuc3BvcnQucmVzcG9uc2VYTUw7CiAgICAgIHRo aXMucmVzcG9uc2VYTUwgID0gT2JqZWN0LmlzVW5kZWZpbmVkKHhtbCkgPyBudWxs IDogeG1sOwogICAgICB0aGlzLnJlc3BvbnNlSlNPTiA9IHRoaXMuX2dldFJlc3Bv bnNlSlNPTigpOwogICAgfQogIH0sCgogIHN0YXR1czogICAgICAwLAogIHN0YXR1 c1RleHQ6ICcnLAoKICBnZXRTdGF0dXM6IEFqYXguUmVxdWVzdC5wcm90b3R5cGUu Z2V0U3RhdHVzLAoKICBnZXRTdGF0dXNUZXh0OiBmdW5jdGlvbigpIHsKICAgIHRy eSB7CiAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5zdGF0dXNUZXh0IHx8ICcn OwogICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gJycgfQogIH0sCgogIGdldEhlYWRl cjogQWpheC5SZXF1ZXN0LnByb3RvdHlwZS5nZXRIZWFkZXIsCgogIGdldEFsbEhl YWRlcnM6IGZ1bmN0aW9uKCkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIHRoaXMu Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7CiAgICB9IGNhdGNoIChlKSB7IHJldHVy biBudWxsIH0KICB9LAoKICBnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24obmFt ZSkgewogICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0LmdldFJlc3BvbnNlSGVhZGVy KG5hbWUpOwogIH0sCgogIGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24o KSB7CiAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuZ2V0QWxsUmVzcG9uc2VIZWFk ZXJzKCk7CiAgfSwKCiAgX2dldEhlYWRlckpTT046IGZ1bmN0aW9uKCkgewogICAg dmFyIGpzb24gPSB0aGlzLmdldEhlYWRlcignWC1KU09OJyk7CiAgICBpZiAoIWpz b24pIHJldHVybiBudWxsOwogICAganNvbiA9IGRlY29kZVVSSUNvbXBvbmVudChl c2NhcGUoanNvbikpOwogICAgdHJ5IHsKICAgICAgcmV0dXJuIGpzb24uZXZhbEpT T04odGhpcy5yZXF1ZXN0Lm9wdGlvbnMuc2FuaXRpemVKU09OIHx8CiAgICAgICAg IXRoaXMucmVxdWVzdC5pc1NhbWVPcmlnaW4oKSk7CiAgICB9IGNhdGNoIChlKSB7 CiAgICAgIHRoaXMucmVxdWVzdC5kaXNwYXRjaEV4Y2VwdGlvbihlKTsKICAgIH0K ICB9LAoKICBfZ2V0UmVzcG9uc2VKU09OOiBmdW5jdGlvbigpIHsKICAgIHZhciBv cHRpb25zID0gdGhpcy5yZXF1ZXN0Lm9wdGlvbnM7CiAgICBpZiAoIW9wdGlvbnMu ZXZhbEpTT04gfHwgKG9wdGlvbnMuZXZhbEpTT04gIT0gJ2ZvcmNlJyAmJgogICAg ICAhKHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50LXR5cGUnKSB8fCAnJykuaW5jbHVk ZSgnYXBwbGljYXRpb24vanNvbicpKSB8fAogICAgICAgIHRoaXMucmVzcG9uc2VU ZXh0LmJsYW5rKCkpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgIHRyeSB7CiAg ICAgIHJldHVybiB0aGlzLnJlc3BvbnNlVGV4dC5ldmFsSlNPTihvcHRpb25zLnNh bml0aXplSlNPTiB8fAogICAgICAgICF0aGlzLnJlcXVlc3QuaXNTYW1lT3JpZ2lu KCkpOwogICAgfSBjYXRjaCAoZSkgewogICAgICB0aGlzLnJlcXVlc3QuZGlzcGF0 Y2hFeGNlcHRpb24oZSk7CiAgICB9CiAgfQp9KTsKCkFqYXguVXBkYXRlciA9IENs YXNzLmNyZWF0ZShBamF4LlJlcXVlc3QsIHsKICBpbml0aWFsaXplOiBmdW5jdGlv bigkc3VwZXIsIGNvbnRhaW5lciwgdXJsLCBvcHRpb25zKSB7CiAgICB0aGlzLmNv bnRhaW5lciA9IHsKICAgICAgc3VjY2VzczogKGNvbnRhaW5lci5zdWNjZXNzIHx8 IGNvbnRhaW5lciksCiAgICAgIGZhaWx1cmU6IChjb250YWluZXIuZmFpbHVyZSB8 fCAoY29udGFpbmVyLnN1Y2Nlc3MgPyBudWxsIDogY29udGFpbmVyKSkKICAgIH07 CgogICAgb3B0aW9ucyA9IE9iamVjdC5jbG9uZShvcHRpb25zKTsKICAgIHZhciBv bkNvbXBsZXRlID0gb3B0aW9ucy5vbkNvbXBsZXRlOwogICAgb3B0aW9ucy5vbkNv bXBsZXRlID0gKGZ1bmN0aW9uKHJlc3BvbnNlLCBqc29uKSB7CiAgICAgIHRoaXMu dXBkYXRlQ29udGVudChyZXNwb25zZS5yZXNwb25zZVRleHQpOwogICAgICBpZiAo T2JqZWN0LmlzRnVuY3Rpb24ob25Db21wbGV0ZSkpIG9uQ29tcGxldGUocmVzcG9u c2UsIGpzb24pOwogICAgfSkuYmluZCh0aGlzKTsKCiAgICAkc3VwZXIodXJsLCBv cHRpb25zKTsKICB9LAoKICB1cGRhdGVDb250ZW50OiBmdW5jdGlvbihyZXNwb25z ZVRleHQpIHsKICAgIHZhciByZWNlaXZlciA9IHRoaXMuY29udGFpbmVyW3RoaXMu c3VjY2VzcygpID8gJ3N1Y2Nlc3MnIDogJ2ZhaWx1cmUnXSwKICAgICAgICBvcHRp b25zID0gdGhpcy5vcHRpb25zOwoKICAgIGlmICghb3B0aW9ucy5ldmFsU2NyaXB0 cykgcmVzcG9uc2VUZXh0ID0gcmVzcG9uc2VUZXh0LnN0cmlwU2NyaXB0cygpOwoK ICAgIGlmIChyZWNlaXZlciA9ICQocmVjZWl2ZXIpKSB7CiAgICAgIGlmIChvcHRp b25zLmluc2VydGlvbikgewogICAgICAgIGlmIChPYmplY3QuaXNTdHJpbmcob3B0 aW9ucy5pbnNlcnRpb24pKSB7CiAgICAgICAgICB2YXIgaW5zZXJ0aW9uID0geyB9 OyBpbnNlcnRpb25bb3B0aW9ucy5pbnNlcnRpb25dID0gcmVzcG9uc2VUZXh0Owog ICAgICAgICAgcmVjZWl2ZXIuaW5zZXJ0KGluc2VydGlvbik7CiAgICAgICAgfQog ICAgICAgIGVsc2Ugb3B0aW9ucy5pbnNlcnRpb24ocmVjZWl2ZXIsIHJlc3BvbnNl VGV4dCk7CiAgICAgIH0KICAgICAgZWxzZSByZWNlaXZlci51cGRhdGUocmVzcG9u c2VUZXh0KTsKICAgIH0KICB9Cn0pOwoKQWpheC5QZXJpb2RpY2FsVXBkYXRlciA9 IENsYXNzLmNyZWF0ZShBamF4LkJhc2UsIHsKICBpbml0aWFsaXplOiBmdW5jdGlv bigkc3VwZXIsIGNvbnRhaW5lciwgdXJsLCBvcHRpb25zKSB7CiAgICAkc3VwZXIo b3B0aW9ucyk7CiAgICB0aGlzLm9uQ29tcGxldGUgPSB0aGlzLm9wdGlvbnMub25D b21wbGV0ZTsKCiAgICB0aGlzLmZyZXF1ZW5jeSA9ICh0aGlzLm9wdGlvbnMuZnJl cXVlbmN5IHx8IDIpOwogICAgdGhpcy5kZWNheSA9ICh0aGlzLm9wdGlvbnMuZGVj YXkgfHwgMSk7CgogICAgdGhpcy51cGRhdGVyID0geyB9OwogICAgdGhpcy5jb250 YWluZXIgPSBjb250YWluZXI7CiAgICB0aGlzLnVybCA9IHVybDsKCiAgICB0aGlz LnN0YXJ0KCk7CiAgfSwKCiAgc3RhcnQ6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5v cHRpb25zLm9uQ29tcGxldGUgPSB0aGlzLnVwZGF0ZUNvbXBsZXRlLmJpbmQodGhp cyk7CiAgICB0aGlzLm9uVGltZXJFdmVudCgpOwogIH0sCgogIHN0b3A6IGZ1bmN0 aW9uKCkgewogICAgdGhpcy51cGRhdGVyLm9wdGlvbnMub25Db21wbGV0ZSA9IHVu ZGVmaW5lZDsKICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTsKICAgICh0aGlz Lm9uQ29tcGxldGUgfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24pLmFwcGx5KHRo aXMsIGFyZ3VtZW50cyk7CiAgfSwKCiAgdXBkYXRlQ29tcGxldGU6IGZ1bmN0aW9u KHJlc3BvbnNlKSB7CiAgICBpZiAodGhpcy5vcHRpb25zLmRlY2F5KSB7CiAgICAg IHRoaXMuZGVjYXkgPSAocmVzcG9uc2UucmVzcG9uc2VUZXh0ID09IHRoaXMubGFz dFRleHQgPwogICAgICAgIHRoaXMuZGVjYXkgKiB0aGlzLm9wdGlvbnMuZGVjYXkg OiAxKTsKCiAgICAgIHRoaXMubGFzdFRleHQgPSByZXNwb25zZS5yZXNwb25zZVRl eHQ7CiAgICB9CiAgICB0aGlzLnRpbWVyID0gdGhpcy5vblRpbWVyRXZlbnQuYmlu ZCh0aGlzKS5kZWxheSh0aGlzLmRlY2F5ICogdGhpcy5mcmVxdWVuY3kpOwogIH0s CgogIG9uVGltZXJFdmVudDogZnVuY3Rpb24oKSB7CiAgICB0aGlzLnVwZGF0ZXIg PSBuZXcgQWpheC5VcGRhdGVyKHRoaXMuY29udGFpbmVyLCB0aGlzLnVybCwgdGhp cy5vcHRpb25zKTsKICB9Cn0pOwpmdW5jdGlvbiAkKGVsZW1lbnQpIHsKICBpZiAo YXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgIGZvciAodmFyIGkgPSAwLCBlbGVt ZW50cyA9IFtdLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3Ro OyBpKyspCiAgICAgIGVsZW1lbnRzLnB1c2goJChhcmd1bWVudHNbaV0pKTsKICAg IHJldHVybiBlbGVtZW50czsKICB9CiAgaWYgKE9iamVjdC5pc1N0cmluZyhlbGVt ZW50KSkKICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVt ZW50KTsKICByZXR1cm4gRWxlbWVudC5leHRlbmQoZWxlbWVudCk7Cn0KCmlmIChQ cm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLlhQYXRoKSB7CiAgZG9jdW1lbnQuX2dl dEVsZW1lbnRzQnlYUGF0aCA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIHBhcmVudEVs ZW1lbnQpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgcXVlcnkgPSBk b2N1bWVudC5ldmFsdWF0ZShleHByZXNzaW9uLCAkKHBhcmVudEVsZW1lbnQpIHx8 IGRvY3VtZW50LAogICAgICBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVf U05BUFNIT1RfVFlQRSwgbnVsbCk7CiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3Ro ID0gcXVlcnkuc25hcHNob3RMZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykKICAgICAg cmVzdWx0cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKHF1ZXJ5LnNuYXBzaG90SXRlbShp KSkpOwogICAgcmV0dXJuIHJlc3VsdHM7CiAgfTsKfQoKLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCgppZiAoIXdpbmRvdy5Ob2RlKSB2YXIgTm9kZSA9IHsg fTsKCmlmICghTm9kZS5FTEVNRU5UX05PREUpIHsKICAvLyBET00gbGV2ZWwgMiBF Q01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKICBPYmplY3QuZXh0ZW5kKE5vZGUs IHsKICAgIEVMRU1FTlRfTk9ERTogMSwKICAgIEFUVFJJQlVURV9OT0RFOiAyLAog ICAgVEVYVF9OT0RFOiAzLAogICAgQ0RBVEFfU0VDVElPTl9OT0RFOiA0LAogICAg RU5USVRZX1JFRkVSRU5DRV9OT0RFOiA1LAogICAgRU5USVRZX05PREU6IDYsCiAg ICBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6IDcsCiAgICBDT01NRU5UX05P REU6IDgsCiAgICBET0NVTUVOVF9OT0RFOiA5LAogICAgRE9DVU1FTlRfVFlQRV9O T0RFOiAxMCwKICAgIERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6IDExLAogICAgTk9U QVRJT05fTk9ERTogMTIKICB9KTsKfQoKKGZ1bmN0aW9uKCkgewogIHZhciBlbGVt ZW50ID0gdGhpcy5FbGVtZW50OwogIHRoaXMuRWxlbWVudCA9IGZ1bmN0aW9uKHRh Z05hbWUsIGF0dHJpYnV0ZXMpIHsKICAgIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVz IHx8IHsgfTsKICAgIHRhZ05hbWUgPSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7CiAg ICB2YXIgY2FjaGUgPSBFbGVtZW50LmNhY2hlOwogICAgaWYgKFByb3RvdHlwZS5C cm93c2VyLklFICYmIGF0dHJpYnV0ZXMubmFtZSkgewogICAgICB0YWdOYW1lID0g JzwnICsgdGFnTmFtZSArICcgbmFtZT0iJyArIGF0dHJpYnV0ZXMubmFtZSArICci Pic7CiAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLm5hbWU7CiAgICAgIHJldHVybiBF bGVtZW50LndyaXRlQXR0cmlidXRlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFn TmFtZSksIGF0dHJpYnV0ZXMpOwogICAgfQogICAgaWYgKCFjYWNoZVt0YWdOYW1l XSkgY2FjaGVbdGFnTmFtZV0gPSBFbGVtZW50LmV4dGVuZChkb2N1bWVudC5jcmVh dGVFbGVtZW50KHRhZ05hbWUpKTsKICAgIHJldHVybiBFbGVtZW50LndyaXRlQXR0 cmlidXRlKGNhY2hlW3RhZ05hbWVdLmNsb25lTm9kZShmYWxzZSksIGF0dHJpYnV0 ZXMpOwogIH07CiAgT2JqZWN0LmV4dGVuZCh0aGlzLkVsZW1lbnQsIGVsZW1lbnQg fHwgeyB9KTsKICBpZiAoZWxlbWVudCkgdGhpcy5FbGVtZW50LnByb3RvdHlwZSA9 IGVsZW1lbnQucHJvdG90eXBlOwp9KS5jYWxsKHdpbmRvdyk7CgpFbGVtZW50LmNh Y2hlID0geyB9OwoKRWxlbWVudC5NZXRob2RzID0gewogIHZpc2libGU6IGZ1bmN0 aW9uKGVsZW1lbnQpIHsKICAgIHJldHVybiAkKGVsZW1lbnQpLnN0eWxlLmRpc3Bs YXkgIT0gJ25vbmUnOwogIH0sCgogIHRvZ2dsZTogZnVuY3Rpb24oZWxlbWVudCkg ewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBFbGVtZW50W0VsZW1lbnQu dmlzaWJsZShlbGVtZW50KSA/ICdoaWRlJyA6ICdzaG93J10oZWxlbWVudCk7CiAg ICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBoaWRlOiBmdW5jdGlvbihlbGVtZW50 KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGVsZW1lbnQuc3R5bGUu ZGlzcGxheSA9ICdub25lJzsKICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIHNo b3c6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQp OwogICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICByZXR1cm4gZWxl bWVudDsKICB9LAoKICByZW1vdmU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVs ZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92 ZUNoaWxkKGVsZW1lbnQpOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfSwKCiAgdXBk YXRlOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7CiAgICBlbGVtZW50ID0g JChlbGVtZW50KTsKICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQudG9FbGVtZW50 KSBjb250ZW50ID0gY29udGVudC50b0VsZW1lbnQoKTsKICAgIGlmIChPYmplY3Qu aXNFbGVtZW50KGNvbnRlbnQpKSByZXR1cm4gZWxlbWVudC51cGRhdGUoKS5pbnNl cnQoY29udGVudCk7CiAgICBjb250ZW50ID0gT2JqZWN0LnRvSFRNTChjb250ZW50 KTsKICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudC5zdHJpcFNjcmlwdHMo KTsKICAgIGNvbnRlbnQuZXZhbFNjcmlwdHMuYmluZChjb250ZW50KS5kZWZlcigp OwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfSwKCiAgcmVwbGFjZTogZnVuY3Rpb24o ZWxlbWVudCwgY29udGVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAg ICBpZiAoY29udGVudCAmJiBjb250ZW50LnRvRWxlbWVudCkgY29udGVudCA9IGNv bnRlbnQudG9FbGVtZW50KCk7CiAgICBlbHNlIGlmICghT2JqZWN0LmlzRWxlbWVu dChjb250ZW50KSkgewogICAgICBjb250ZW50ID0gT2JqZWN0LnRvSFRNTChjb250 ZW50KTsKICAgICAgdmFyIHJhbmdlID0gZWxlbWVudC5vd25lckRvY3VtZW50LmNy ZWF0ZVJhbmdlKCk7CiAgICAgIHJhbmdlLnNlbGVjdE5vZGUoZWxlbWVudCk7CiAg ICAgIGNvbnRlbnQuZXZhbFNjcmlwdHMuYmluZChjb250ZW50KS5kZWZlcigpOwog ICAgICBjb250ZW50ID0gcmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNv bnRlbnQuc3RyaXBTY3JpcHRzKCkpOwogICAgfQogICAgZWxlbWVudC5wYXJlbnRO b2RlLnJlcGxhY2VDaGlsZChjb250ZW50LCBlbGVtZW50KTsKICAgIHJldHVybiBl bGVtZW50OwogIH0sCgogIGluc2VydDogZnVuY3Rpb24oZWxlbWVudCwgaW5zZXJ0 aW9ucykgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CgogICAgaWYgKE9iamVj dC5pc1N0cmluZyhpbnNlcnRpb25zKSB8fCBPYmplY3QuaXNOdW1iZXIoaW5zZXJ0 aW9ucykgfHwKICAgICAgICBPYmplY3QuaXNFbGVtZW50KGluc2VydGlvbnMpIHx8 IChpbnNlcnRpb25zICYmIChpbnNlcnRpb25zLnRvRWxlbWVudCB8fCBpbnNlcnRp b25zLnRvSFRNTCkpKQogICAgICAgICAgaW5zZXJ0aW9ucyA9IHtib3R0b206aW5z ZXJ0aW9uc307CgogICAgdmFyIGNvbnRlbnQsIGluc2VydCwgdGFnTmFtZSwgY2hp bGROb2RlczsKCiAgICBmb3IgKHZhciBwb3NpdGlvbiBpbiBpbnNlcnRpb25zKSB7 CiAgICAgIGNvbnRlbnQgID0gaW5zZXJ0aW9uc1twb3NpdGlvbl07CiAgICAgIHBv c2l0aW9uID0gcG9zaXRpb24udG9Mb3dlckNhc2UoKTsKICAgICAgaW5zZXJ0ID0g RWxlbWVudC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zW3Bvc2l0aW9uXTsKCiAgICAg IGlmIChjb250ZW50ICYmIGNvbnRlbnQudG9FbGVtZW50KSBjb250ZW50ID0gY29u dGVudC50b0VsZW1lbnQoKTsKICAgICAgaWYgKE9iamVjdC5pc0VsZW1lbnQoY29u dGVudCkpIHsKICAgICAgICBpbnNlcnQoZWxlbWVudCwgY29udGVudCk7CiAgICAg ICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGNvbnRlbnQgPSBPYmplY3QudG9I VE1MKGNvbnRlbnQpOwoKICAgICAgdGFnTmFtZSA9ICgocG9zaXRpb24gPT0gJ2Jl Zm9yZScgfHwgcG9zaXRpb24gPT0gJ2FmdGVyJykKICAgICAgICA/IGVsZW1lbnQu cGFyZW50Tm9kZSA6IGVsZW1lbnQpLnRhZ05hbWUudG9VcHBlckNhc2UoKTsKCiAg ICAgIGNoaWxkTm9kZXMgPSBFbGVtZW50Ll9nZXRDb250ZW50RnJvbUFub255bW91 c0VsZW1lbnQodGFnTmFtZSwgY29udGVudC5zdHJpcFNjcmlwdHMoKSk7CgogICAg ICBpZiAocG9zaXRpb24gPT0gJ3RvcCcgfHwgcG9zaXRpb24gPT0gJ2FmdGVyJykg Y2hpbGROb2Rlcy5yZXZlcnNlKCk7CiAgICAgIGNoaWxkTm9kZXMuZWFjaChpbnNl cnQuY3VycnkoZWxlbWVudCkpOwoKICAgICAgY29udGVudC5ldmFsU2NyaXB0cy5i aW5kKGNvbnRlbnQpLmRlZmVyKCk7CiAgICB9CgogICAgcmV0dXJuIGVsZW1lbnQ7 CiAgfSwKCiAgd3JhcDogZnVuY3Rpb24oZWxlbWVudCwgd3JhcHBlciwgYXR0cmli dXRlcykgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBpZiAoT2JqZWN0 LmlzRWxlbWVudCh3cmFwcGVyKSkKICAgICAgJCh3cmFwcGVyKS53cml0ZUF0dHJp YnV0ZShhdHRyaWJ1dGVzIHx8IHsgfSk7CiAgICBlbHNlIGlmIChPYmplY3QuaXNT dHJpbmcod3JhcHBlcikpIHdyYXBwZXIgPSBuZXcgRWxlbWVudCh3cmFwcGVyLCBh dHRyaWJ1dGVzKTsKICAgIGVsc2Ugd3JhcHBlciA9IG5ldyBFbGVtZW50KCdkaXYn LCB3cmFwcGVyKTsKICAgIGlmIChlbGVtZW50LnBhcmVudE5vZGUpCiAgICAgIGVs ZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQod3JhcHBlciwgZWxlbWVudCk7 CiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgcmV0dXJuIHdy YXBwZXI7CiAgfSwKCiAgaW5zcGVjdDogZnVuY3Rpb24oZWxlbWVudCkgewogICAg ZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB2YXIgcmVzdWx0ID0gJzwnICsgZWxl bWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAkSCh7J2lkJzogJ2lkJywg J2NsYXNzTmFtZSc6ICdjbGFzcyd9KS5lYWNoKGZ1bmN0aW9uKHBhaXIpIHsKICAg ICAgdmFyIHByb3BlcnR5ID0gcGFpci5maXJzdCgpLCBhdHRyaWJ1dGUgPSBwYWly Lmxhc3QoKTsKICAgICAgdmFyIHZhbHVlID0gKGVsZW1lbnRbcHJvcGVydHldIHx8 ICcnKS50b1N0cmluZygpOwogICAgICBpZiAodmFsdWUpIHJlc3VsdCArPSAnICcg KyBhdHRyaWJ1dGUgKyAnPScgKyB2YWx1ZS5pbnNwZWN0KHRydWUpOwogICAgfSk7 CiAgICByZXR1cm4gcmVzdWx0ICsgJz4nOwogIH0sCgogIHJlY3Vyc2l2ZWx5Q29s bGVjdDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHkpIHsKICAgIGVsZW1lbnQg PSAkKGVsZW1lbnQpOwogICAgdmFyIGVsZW1lbnRzID0gW107CiAgICB3aGlsZSAo ZWxlbWVudCA9IGVsZW1lbnRbcHJvcGVydHldKQogICAgICBpZiAoZWxlbWVudC5u b2RlVHlwZSA9PSAxKQogICAgICAgIGVsZW1lbnRzLnB1c2goRWxlbWVudC5leHRl bmQoZWxlbWVudCkpOwogICAgcmV0dXJuIGVsZW1lbnRzOwogIH0sCgogIGFuY2Vz dG9yczogZnVuY3Rpb24oZWxlbWVudCkgewogICAgcmV0dXJuICQoZWxlbWVudCku cmVjdXJzaXZlbHlDb2xsZWN0KCdwYXJlbnROb2RlJyk7CiAgfSwKCiAgZGVzY2Vu ZGFudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHJldHVybiAkKGVsZW1lbnQp LnNlbGVjdCgiKiIpOwogIH0sCgogIGZpcnN0RGVzY2VuZGFudDogZnVuY3Rpb24o ZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCkuZmlyc3RDaGlsZDsK ICAgIHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgIT0gMSkgZWxl bWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmc7CiAgICByZXR1cm4gJChlbGVtZW50 KTsKICB9LAoKICBpbW1lZGlhdGVEZXNjZW5kYW50czogZnVuY3Rpb24oZWxlbWVu dCkgewogICAgaWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkuZmlyc3RDaGlsZCkp IHJldHVybiBbXTsKICAgIHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5 cGUgIT0gMSkgZWxlbWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmc7CiAgICBpZiAo ZWxlbWVudCkgcmV0dXJuIFtlbGVtZW50XS5jb25jYXQoJChlbGVtZW50KS5uZXh0 U2libGluZ3MoKSk7CiAgICByZXR1cm4gW107CiAgfSwKCiAgcHJldmlvdXNTaWJs aW5nczogZnVuY3Rpb24oZWxlbWVudCkgewogICAgcmV0dXJuICQoZWxlbWVudCku cmVjdXJzaXZlbHlDb2xsZWN0KCdwcmV2aW91c1NpYmxpbmcnKTsKICB9LAoKICBu ZXh0U2libGluZ3M6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHJldHVybiAkKGVs ZW1lbnQpLnJlY3Vyc2l2ZWx5Q29sbGVjdCgnbmV4dFNpYmxpbmcnKTsKICB9LAoK ICBzaWJsaW5nczogZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQo ZWxlbWVudCk7CiAgICByZXR1cm4gZWxlbWVudC5wcmV2aW91c1NpYmxpbmdzKCku cmV2ZXJzZSgpLmNvbmNhdChlbGVtZW50Lm5leHRTaWJsaW5ncygpKTsKICB9LAoK ICBtYXRjaDogZnVuY3Rpb24oZWxlbWVudCwgc2VsZWN0b3IpIHsKICAgIGlmIChP YmplY3QuaXNTdHJpbmcoc2VsZWN0b3IpKQogICAgICBzZWxlY3RvciA9IG5ldyBT ZWxlY3RvcihzZWxlY3Rvcik7CiAgICByZXR1cm4gc2VsZWN0b3IubWF0Y2goJChl bGVtZW50KSk7CiAgfSwKCiAgdXA6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Np b24sIGluZGV4KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmIChh cmd1bWVudHMubGVuZ3RoID09IDEpIHJldHVybiAkKGVsZW1lbnQucGFyZW50Tm9k ZSk7CiAgICB2YXIgYW5jZXN0b3JzID0gZWxlbWVudC5hbmNlc3RvcnMoKTsKICAg IHJldHVybiBPYmplY3QuaXNOdW1iZXIoZXhwcmVzc2lvbikgPyBhbmNlc3RvcnNb ZXhwcmVzc2lvbl0gOgogICAgICBTZWxlY3Rvci5maW5kRWxlbWVudChhbmNlc3Rv cnMsIGV4cHJlc3Npb24sIGluZGV4KTsKICB9LAoKICBkb3duOiBmdW5jdGlvbihl bGVtZW50LCBleHByZXNzaW9uLCBpbmRleCkgewogICAgZWxlbWVudCA9ICQoZWxl bWVudCk7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSByZXR1cm4gZWxl bWVudC5maXJzdERlc2NlbmRhbnQoKTsKICAgIHJldHVybiBPYmplY3QuaXNOdW1i ZXIoZXhwcmVzc2lvbikgPyBlbGVtZW50LmRlc2NlbmRhbnRzKClbZXhwcmVzc2lv bl0gOgogICAgICBFbGVtZW50LnNlbGVjdChlbGVtZW50LCBleHByZXNzaW9uKVtp bmRleCB8fCAwXTsKICB9LAoKICBwcmV2aW91czogZnVuY3Rpb24oZWxlbWVudCwg ZXhwcmVzc2lvbiwgaW5kZXgpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwog ICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgcmV0dXJuICQoU2VsZWN0b3Iu aGFuZGxlcnMucHJldmlvdXNFbGVtZW50U2libGluZyhlbGVtZW50KSk7CiAgICB2 YXIgcHJldmlvdXNTaWJsaW5ncyA9IGVsZW1lbnQucHJldmlvdXNTaWJsaW5ncygp OwogICAgcmV0dXJuIE9iamVjdC5pc051bWJlcihleHByZXNzaW9uKSA/IHByZXZp b3VzU2libGluZ3NbZXhwcmVzc2lvbl0gOgogICAgICBTZWxlY3Rvci5maW5kRWxl bWVudChwcmV2aW91c1NpYmxpbmdzLCBleHByZXNzaW9uLCBpbmRleCk7CiAgfSwK CiAgbmV4dDogZnVuY3Rpb24oZWxlbWVudCwgZXhwcmVzc2lvbiwgaW5kZXgpIHsK ICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgaWYgKGFyZ3VtZW50cy5sZW5n dGggPT0gMSkgcmV0dXJuICQoU2VsZWN0b3IuaGFuZGxlcnMubmV4dEVsZW1lbnRT aWJsaW5nKGVsZW1lbnQpKTsKICAgIHZhciBuZXh0U2libGluZ3MgPSBlbGVtZW50 Lm5leHRTaWJsaW5ncygpOwogICAgcmV0dXJuIE9iamVjdC5pc051bWJlcihleHBy ZXNzaW9uKSA/IG5leHRTaWJsaW5nc1tleHByZXNzaW9uXSA6CiAgICAgIFNlbGVj dG9yLmZpbmRFbGVtZW50KG5leHRTaWJsaW5ncywgZXhwcmVzc2lvbiwgaW5kZXgp OwogIH0sCgogIHNlbGVjdDogZnVuY3Rpb24oKSB7CiAgICB2YXIgYXJncyA9ICRB KGFyZ3VtZW50cyksIGVsZW1lbnQgPSAkKGFyZ3Muc2hpZnQoKSk7CiAgICByZXR1 cm4gU2VsZWN0b3IuZmluZENoaWxkRWxlbWVudHMoZWxlbWVudCwgYXJncyk7CiAg fSwKCiAgYWRqYWNlbnQ6IGZ1bmN0aW9uKCkgewogICAgdmFyIGFyZ3MgPSAkQShh cmd1bWVudHMpLCBlbGVtZW50ID0gJChhcmdzLnNoaWZ0KCkpOwogICAgcmV0dXJu IFNlbGVjdG9yLmZpbmRDaGlsZEVsZW1lbnRzKGVsZW1lbnQucGFyZW50Tm9kZSwg YXJncykud2l0aG91dChlbGVtZW50KTsKICB9LAoKICBpZGVudGlmeTogZnVuY3Rp b24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB2YXIg aWQgPSBlbGVtZW50LnJlYWRBdHRyaWJ1dGUoJ2lkJyksIHNlbGYgPSBhcmd1bWVu dHMuY2FsbGVlOwogICAgaWYgKGlkKSByZXR1cm4gaWQ7CiAgICBkbyB7IGlkID0g J2Fub255bW91c19lbGVtZW50XycgKyBzZWxmLmNvdW50ZXIrKyB9IHdoaWxlICgk KGlkKSk7CiAgICBlbGVtZW50LndyaXRlQXR0cmlidXRlKCdpZCcsIGlkKTsKICAg IHJldHVybiBpZDsKICB9LAoKICByZWFkQXR0cmlidXRlOiBmdW5jdGlvbihlbGVt ZW50LCBuYW1lKSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmIChQ cm90b3R5cGUuQnJvd3Nlci5JRSkgewogICAgICB2YXIgdCA9IEVsZW1lbnQuX2F0 dHJpYnV0ZVRyYW5zbGF0aW9ucy5yZWFkOwogICAgICBpZiAodC52YWx1ZXNbbmFt ZV0pIHJldHVybiB0LnZhbHVlc1tuYW1lXShlbGVtZW50LCBuYW1lKTsKICAgICAg aWYgKHQubmFtZXNbbmFtZV0pIG5hbWUgPSB0Lm5hbWVzW25hbWVdOwogICAgICBp ZiAobmFtZS5pbmNsdWRlKCc6JykpIHsKICAgICAgICByZXR1cm4gKCFlbGVtZW50 LmF0dHJpYnV0ZXMgfHwgIWVsZW1lbnQuYXR0cmlidXRlc1tuYW1lXSkgPyBudWxs IDoKICAgICAgICAgZWxlbWVudC5hdHRyaWJ1dGVzW25hbWVdLnZhbHVlOwogICAg ICB9CiAgICB9CiAgICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7 CiAgfSwKCiAgd3JpdGVBdHRyaWJ1dGU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUs IHZhbHVlKSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHZhciBhdHRy aWJ1dGVzID0geyB9LCB0ID0gRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25z LndyaXRlOwoKICAgIGlmICh0eXBlb2YgbmFtZSA9PSAnb2JqZWN0JykgYXR0cmli dXRlcyA9IG5hbWU7CiAgICBlbHNlIGF0dHJpYnV0ZXNbbmFtZV0gPSBPYmplY3Qu aXNVbmRlZmluZWQodmFsdWUpID8gdHJ1ZSA6IHZhbHVlOwoKICAgIGZvciAodmFy IGF0dHIgaW4gYXR0cmlidXRlcykgewogICAgICBuYW1lID0gdC5uYW1lc1thdHRy XSB8fCBhdHRyOwogICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXNbYXR0cl07CiAgICAg IGlmICh0LnZhbHVlc1thdHRyXSkgbmFtZSA9IHQudmFsdWVzW2F0dHJdKGVsZW1l bnQsIHZhbHVlKTsKICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9 PT0gbnVsbCkKICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsK ICAgICAgZWxzZSBpZiAodmFsdWUgPT09IHRydWUpCiAgICAgICAgZWxlbWVudC5z ZXRBdHRyaWJ1dGUobmFtZSwgbmFtZSk7CiAgICAgIGVsc2UgZWxlbWVudC5zZXRB dHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogICAgfQogICAgcmV0dXJuIGVsZW1lbnQ7 CiAgfSwKCiAgZ2V0SGVpZ2h0OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICByZXR1 cm4gJChlbGVtZW50KS5nZXREaW1lbnNpb25zKCkuaGVpZ2h0OwogIH0sCgogIGdl dFdpZHRoOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICByZXR1cm4gJChlbGVtZW50 KS5nZXREaW1lbnNpb25zKCkud2lkdGg7CiAgfSwKCiAgY2xhc3NOYW1lczogZnVu Y3Rpb24oZWxlbWVudCkgewogICAgcmV0dXJuIG5ldyBFbGVtZW50LkNsYXNzTmFt ZXMoZWxlbWVudCk7CiAgfSwKCiAgaGFzQ2xhc3NOYW1lOiBmdW5jdGlvbihlbGVt ZW50LCBjbGFzc05hbWUpIHsKICAgIGlmICghKGVsZW1lbnQgPSAkKGVsZW1lbnQp KSkgcmV0dXJuOwogICAgdmFyIGVsZW1lbnRDbGFzc05hbWUgPSBlbGVtZW50LmNs YXNzTmFtZTsKICAgIHJldHVybiAoZWxlbWVudENsYXNzTmFtZS5sZW5ndGggPiAw ICYmIChlbGVtZW50Q2xhc3NOYW1lID09IGNsYXNzTmFtZSB8fAogICAgICBuZXcg UmVnRXhwKCIoXnxcXHMpIiArIGNsYXNzTmFtZSArICIoXFxzfCQpIikudGVzdChl bGVtZW50Q2xhc3NOYW1lKSkpOwogIH0sCgogIGFkZENsYXNzTmFtZTogZnVuY3Rp b24oZWxlbWVudCwgY2xhc3NOYW1lKSB7CiAgICBpZiAoIShlbGVtZW50ID0gJChl bGVtZW50KSkpIHJldHVybjsKICAgIGlmICghZWxlbWVudC5oYXNDbGFzc05hbWUo Y2xhc3NOYW1lKSkKICAgICAgZWxlbWVudC5jbGFzc05hbWUgKz0gKGVsZW1lbnQu Y2xhc3NOYW1lID8gJyAnIDogJycpICsgY2xhc3NOYW1lOwogICAgcmV0dXJuIGVs ZW1lbnQ7CiAgfSwKCiAgcmVtb3ZlQ2xhc3NOYW1lOiBmdW5jdGlvbihlbGVtZW50 LCBjbGFzc05hbWUpIHsKICAgIGlmICghKGVsZW1lbnQgPSAkKGVsZW1lbnQpKSkg cmV0dXJuOwogICAgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFt ZS5yZXBsYWNlKAogICAgICBuZXcgUmVnRXhwKCIoXnxcXHMrKSIgKyBjbGFzc05h bWUgKyAiKFxccyt8JCkiKSwgJyAnKS5zdHJpcCgpOwogICAgcmV0dXJuIGVsZW1l bnQ7CiAgfSwKCiAgdG9nZ2xlQ2xhc3NOYW1lOiBmdW5jdGlvbihlbGVtZW50LCBj bGFzc05hbWUpIHsKICAgIGlmICghKGVsZW1lbnQgPSAkKGVsZW1lbnQpKSkgcmV0 dXJuOwogICAgcmV0dXJuIGVsZW1lbnRbZWxlbWVudC5oYXNDbGFzc05hbWUoY2xh c3NOYW1lKSA/CiAgICAgICdyZW1vdmVDbGFzc05hbWUnIDogJ2FkZENsYXNzTmFt ZSddKGNsYXNzTmFtZSk7CiAgfSwKCiAgLy8gcmVtb3ZlcyB3aGl0ZXNwYWNlLW9u bHkgdGV4dCBub2RlIGNoaWxkcmVuCiAgY2xlYW5XaGl0ZXNwYWNlOiBmdW5jdGlv bihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHZhciBu b2RlID0gZWxlbWVudC5maXJzdENoaWxkOwogICAgd2hpbGUgKG5vZGUpIHsKICAg ICAgdmFyIG5leHROb2RlID0gbm9kZS5uZXh0U2libGluZzsKICAgICAgaWYgKG5v ZGUubm9kZVR5cGUgPT0gMyAmJiAhL1xTLy50ZXN0KG5vZGUubm9kZVZhbHVlKSkK ICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKG5vZGUpOwogICAgICBub2RlID0g bmV4dE5vZGU7CiAgICB9CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBlbXB0 eTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgcmV0dXJuICQoZWxlbWVudCkuaW5u ZXJIVE1MLmJsYW5rKCk7CiAgfSwKCiAgZGVzY2VuZGFudE9mOiBmdW5jdGlvbihl bGVtZW50LCBhbmNlc3RvcikgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCksIGFu Y2VzdG9yID0gJChhbmNlc3Rvcik7CgogICAgaWYgKGVsZW1lbnQuY29tcGFyZURv Y3VtZW50UG9zaXRpb24pCiAgICAgIHJldHVybiAoZWxlbWVudC5jb21wYXJlRG9j dW1lbnRQb3NpdGlvbihhbmNlc3RvcikgJiA4KSA9PT0gODsKCiAgICBpZiAoYW5j ZXN0b3IuY29udGFpbnMpCiAgICAgIHJldHVybiBhbmNlc3Rvci5jb250YWlucyhl bGVtZW50KSAmJiBhbmNlc3RvciAhPT0gZWxlbWVudDsKCiAgICB3aGlsZSAoZWxl bWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkKICAgICAgaWYgKGVsZW1lbnQgPT0g YW5jZXN0b3IpIHJldHVybiB0cnVlOwoKICAgIHJldHVybiBmYWxzZTsKICB9LAoK ICBzY3JvbGxUbzogZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQo ZWxlbWVudCk7CiAgICB2YXIgcG9zID0gZWxlbWVudC5jdW11bGF0aXZlT2Zmc2V0 KCk7CiAgICB3aW5kb3cuc2Nyb2xsVG8ocG9zWzBdLCBwb3NbMV0pOwogICAgcmV0 dXJuIGVsZW1lbnQ7CiAgfSwKCiAgZ2V0U3R5bGU6IGZ1bmN0aW9uKGVsZW1lbnQs IHN0eWxlKSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHN0eWxlID0g c3R5bGUgPT0gJ2Zsb2F0JyA/ICdjc3NGbG9hdCcgOiBzdHlsZS5jYW1lbGl6ZSgp OwogICAgdmFyIHZhbHVlID0gZWxlbWVudC5zdHlsZVtzdHlsZV07CiAgICBpZiAo IXZhbHVlIHx8IHZhbHVlID09ICdhdXRvJykgewogICAgICB2YXIgY3NzID0gZG9j dW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxs KTsKICAgICAgdmFsdWUgPSBjc3MgPyBjc3Nbc3R5bGVdIDogbnVsbDsKICAgIH0K ICAgIGlmIChzdHlsZSA9PSAnb3BhY2l0eScpIHJldHVybiB2YWx1ZSA/IHBhcnNl RmxvYXQodmFsdWUpIDogMS4wOwogICAgcmV0dXJuIHZhbHVlID09ICdhdXRvJyA/ IG51bGwgOiB2YWx1ZTsKICB9LAoKICBnZXRPcGFjaXR5OiBmdW5jdGlvbihlbGVt ZW50KSB7CiAgICByZXR1cm4gJChlbGVtZW50KS5nZXRTdHlsZSgnb3BhY2l0eScp OwogIH0sCgogIHNldFN0eWxlOiBmdW5jdGlvbihlbGVtZW50LCBzdHlsZXMpIHsK ICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIGVsZW1lbnRTdHlsZSA9 IGVsZW1lbnQuc3R5bGUsIG1hdGNoOwogICAgaWYgKE9iamVjdC5pc1N0cmluZyhz dHlsZXMpKSB7CiAgICAgIGVsZW1lbnQuc3R5bGUuY3NzVGV4dCArPSAnOycgKyBz dHlsZXM7CiAgICAgIHJldHVybiBzdHlsZXMuaW5jbHVkZSgnb3BhY2l0eScpID8K ICAgICAgICBlbGVtZW50LnNldE9wYWNpdHkoc3R5bGVzLm1hdGNoKC9vcGFjaXR5 OlxzKihcZD9cLj9cZCopLylbMV0pIDogZWxlbWVudDsKICAgIH0KICAgIGZvciAo dmFyIHByb3BlcnR5IGluIHN0eWxlcykKICAgICAgaWYgKHByb3BlcnR5ID09ICdv cGFjaXR5JykgZWxlbWVudC5zZXRPcGFjaXR5KHN0eWxlc1twcm9wZXJ0eV0pOwog ICAgICBlbHNlCiAgICAgICAgZWxlbWVudFN0eWxlWyhwcm9wZXJ0eSA9PSAnZmxv YXQnIHx8IHByb3BlcnR5ID09ICdjc3NGbG9hdCcpID8KICAgICAgICAgIChPYmpl Y3QuaXNVbmRlZmluZWQoZWxlbWVudFN0eWxlLnN0eWxlRmxvYXQpID8gJ2Nzc0Zs b2F0JyA6ICdzdHlsZUZsb2F0JykgOgogICAgICAgICAgICBwcm9wZXJ0eV0gPSBz dHlsZXNbcHJvcGVydHldOwoKICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIHNl dE9wYWNpdHk6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7CiAgICBlbGVtZW50 ID0gJChlbGVtZW50KTsKICAgIGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICh2YWx1 ZSA9PSAxIHx8IHZhbHVlID09PSAnJykgPyAnJyA6CiAgICAgICh2YWx1ZSA8IDAu MDAwMDEpID8gMCA6IHZhbHVlOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfSwKCiAg Z2V0RGltZW5zaW9uczogZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9 ICQoZWxlbWVudCk7CiAgICB2YXIgZGlzcGxheSA9IGVsZW1lbnQuZ2V0U3R5bGUo J2Rpc3BsYXknKTsKICAgIGlmIChkaXNwbGF5ICE9ICdub25lJyAmJiBkaXNwbGF5 ICE9IG51bGwpIC8vIFNhZmFyaSBidWcKICAgICAgcmV0dXJuIHt3aWR0aDogZWxl bWVudC5vZmZzZXRXaWR0aCwgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodH07 CgogICAgLy8gQWxsICpXaWR0aCBhbmQgKkhlaWdodCBwcm9wZXJ0aWVzIGdpdmUg MCBvbiBlbGVtZW50cyB3aXRoIGRpc3BsYXkgbm9uZSwKICAgIC8vIHNvIGVuYWJs ZSB0aGUgZWxlbWVudCB0ZW1wb3JhcmlseQogICAgdmFyIGVscyA9IGVsZW1lbnQu c3R5bGU7CiAgICB2YXIgb3JpZ2luYWxWaXNpYmlsaXR5ID0gZWxzLnZpc2liaWxp dHk7CiAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9IGVscy5wb3NpdGlvbjsKICAg IHZhciBvcmlnaW5hbERpc3BsYXkgPSBlbHMuZGlzcGxheTsKICAgIGVscy52aXNp YmlsaXR5ID0gJ2hpZGRlbic7CiAgICBlbHMucG9zaXRpb24gPSAnYWJzb2x1dGUn OwogICAgZWxzLmRpc3BsYXkgPSAnYmxvY2snOwogICAgdmFyIG9yaWdpbmFsV2lk dGggPSBlbGVtZW50LmNsaWVudFdpZHRoOwogICAgdmFyIG9yaWdpbmFsSGVpZ2h0 ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7CiAgICBlbHMuZGlzcGxheSA9IG9yaWdp bmFsRGlzcGxheTsKICAgIGVscy5wb3NpdGlvbiA9IG9yaWdpbmFsUG9zaXRpb247 CiAgICBlbHMudmlzaWJpbGl0eSA9IG9yaWdpbmFsVmlzaWJpbGl0eTsKICAgIHJl dHVybiB7d2lkdGg6IG9yaWdpbmFsV2lkdGgsIGhlaWdodDogb3JpZ2luYWxIZWln aHR9OwogIH0sCgogIG1ha2VQb3NpdGlvbmVkOiBmdW5jdGlvbihlbGVtZW50KSB7 CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHZhciBwb3MgPSBFbGVtZW50 LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpOwogICAgaWYgKHBvcyA9PSAn c3RhdGljJyB8fCAhcG9zKSB7CiAgICAgIGVsZW1lbnQuX21hZGVQb3NpdGlvbmVk ID0gdHJ1ZTsKICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2 ZSc7CiAgICAgIC8vIE9wZXJhIHJldHVybnMgdGhlIG9mZnNldCByZWxhdGl2ZSB0 byB0aGUgcG9zaXRpb25pbmcgY29udGV4dCwgd2hlbiBhbgogICAgICAvLyBlbGVt ZW50IGlzIHBvc2l0aW9uIHJlbGF0aXZlIGJ1dCB0b3AgYW5kIGxlZnQgaGF2ZSBu b3QgYmVlbiBkZWZpbmVkCiAgICAgIGlmIChQcm90b3R5cGUuQnJvd3Nlci5PcGVy YSkgewogICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gMDsKICAgICAgICBlbGVt ZW50LnN0eWxlLmxlZnQgPSAwOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZWxl bWVudDsKICB9LAoKICB1bmRvUG9zaXRpb25lZDogZnVuY3Rpb24oZWxlbWVudCkg ewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBpZiAoZWxlbWVudC5fbWFk ZVBvc2l0aW9uZWQpIHsKICAgICAgZWxlbWVudC5fbWFkZVBvc2l0aW9uZWQgPSB1 bmRlZmluZWQ7CiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPQogICAgICAg IGVsZW1lbnQuc3R5bGUudG9wID0KICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQg PQogICAgICAgIGVsZW1lbnQuc3R5bGUuYm90dG9tID0KICAgICAgICBlbGVtZW50 LnN0eWxlLnJpZ2h0ID0gJyc7CiAgICB9CiAgICByZXR1cm4gZWxlbWVudDsKICB9 LAoKICBtYWtlQ2xpcHBpbmc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1l bnQgPSAkKGVsZW1lbnQpOwogICAgaWYgKGVsZW1lbnQuX292ZXJmbG93KSByZXR1 cm4gZWxlbWVudDsKICAgIGVsZW1lbnQuX292ZXJmbG93ID0gRWxlbWVudC5nZXRT dHlsZShlbGVtZW50LCAnb3ZlcmZsb3cnKSB8fCAnYXV0byc7CiAgICBpZiAoZWxl bWVudC5fb3ZlcmZsb3cgIT09ICdoaWRkZW4nKQogICAgICBlbGVtZW50LnN0eWxl Lm92ZXJmbG93ID0gJ2hpZGRlbic7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoK ICB1bmRvQ2xpcHBpbmc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQg PSAkKGVsZW1lbnQpOwogICAgaWYgKCFlbGVtZW50Ll9vdmVyZmxvdykgcmV0dXJu IGVsZW1lbnQ7CiAgICBlbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gZWxlbWVudC5f b3ZlcmZsb3cgPT0gJ2F1dG8nID8gJycgOiBlbGVtZW50Ll9vdmVyZmxvdzsKICAg IGVsZW1lbnQuX292ZXJmbG93ID0gbnVsbDsKICAgIHJldHVybiBlbGVtZW50Owog IH0sCgogIGN1bXVsYXRpdmVPZmZzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAg IHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOwogICAgZG8gewogICAgICB2YWx1 ZVQgKz0gZWxlbWVudC5vZmZzZXRUb3AgIHx8IDA7CiAgICAgIHZhbHVlTCArPSBl bGVtZW50Lm9mZnNldExlZnQgfHwgMDsKICAgICAgZWxlbWVudCA9IGVsZW1lbnQu b2Zmc2V0UGFyZW50OwogICAgfSB3aGlsZSAoZWxlbWVudCk7CiAgICByZXR1cm4g RWxlbWVudC5fcmV0dXJuT2Zmc2V0KHZhbHVlTCwgdmFsdWVUKTsKICB9LAoKICBw b3NpdGlvbmVkT2Zmc2V0OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB2YXIgdmFs dWVUID0gMCwgdmFsdWVMID0gMDsKICAgIGRvIHsKICAgICAgdmFsdWVUICs9IGVs ZW1lbnQub2Zmc2V0VG9wICB8fCAwOwogICAgICB2YWx1ZUwgKz0gZWxlbWVudC5v ZmZzZXRMZWZ0IHx8IDA7CiAgICAgIGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBh cmVudDsKICAgICAgaWYgKGVsZW1lbnQpIHsKICAgICAgICBpZiAoZWxlbWVudC50 YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT0gJ0JPRFknKSBicmVhazsKICAgICAgICB2 YXIgcCA9IEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJyk7CiAg ICAgICAgaWYgKHAgIT09ICdzdGF0aWMnKSBicmVhazsKICAgICAgfQogICAgfSB3 aGlsZSAoZWxlbWVudCk7CiAgICByZXR1cm4gRWxlbWVudC5fcmV0dXJuT2Zmc2V0 KHZhbHVlTCwgdmFsdWVUKTsKICB9LAoKICBhYnNvbHV0aXplOiBmdW5jdGlvbihl bGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmIChlbGVt ZW50LmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdhYnNvbHV0ZScpIHJldHVybiBl bGVtZW50OwogICAgLy8gUG9zaXRpb24ucHJlcGFyZSgpOyAvLyBUbyBiZSBkb25l IG1hbnVhbGx5IGJ5IFNjcmlwdHkgd2hlbiBpdCBuZWVkcyBpdC4KCiAgICB2YXIg b2Zmc2V0cyA9IGVsZW1lbnQucG9zaXRpb25lZE9mZnNldCgpOwogICAgdmFyIHRv cCAgICAgPSBvZmZzZXRzWzFdOwogICAgdmFyIGxlZnQgICAgPSBvZmZzZXRzWzBd OwogICAgdmFyIHdpZHRoICAgPSBlbGVtZW50LmNsaWVudFdpZHRoOwogICAgdmFy IGhlaWdodCAgPSBlbGVtZW50LmNsaWVudEhlaWdodDsKCiAgICBlbGVtZW50Ll9v cmlnaW5hbExlZnQgICA9IGxlZnQgLSBwYXJzZUZsb2F0KGVsZW1lbnQuc3R5bGUu bGVmdCAgfHwgMCk7CiAgICBlbGVtZW50Ll9vcmlnaW5hbFRvcCAgICA9IHRvcCAg LSBwYXJzZUZsb2F0KGVsZW1lbnQuc3R5bGUudG9wIHx8IDApOwogICAgZWxlbWVu dC5fb3JpZ2luYWxXaWR0aCAgPSBlbGVtZW50LnN0eWxlLndpZHRoOwogICAgZWxl bWVudC5fb3JpZ2luYWxIZWlnaHQgPSBlbGVtZW50LnN0eWxlLmhlaWdodDsKCiAg ICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKICAgIGVsZW1l bnQuc3R5bGUudG9wICAgID0gdG9wICsgJ3B4JzsKICAgIGVsZW1lbnQuc3R5bGUu bGVmdCAgID0gbGVmdCArICdweCc7CiAgICBlbGVtZW50LnN0eWxlLndpZHRoICA9 IHdpZHRoICsgJ3B4JzsKICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0 ICsgJ3B4JzsKICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIHJlbGF0aXZpemU6 IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwog ICAgaWYgKGVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0aW9uJykgPT0gJ3JlbGF0aXZl JykgcmV0dXJuIGVsZW1lbnQ7CiAgICAvLyBQb3NpdGlvbi5wcmVwYXJlKCk7IC8v IFRvIGJlIGRvbmUgbWFudWFsbHkgYnkgU2NyaXB0eSB3aGVuIGl0IG5lZWRzIGl0 LgoKICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOwogICAg dmFyIHRvcCAgPSBwYXJzZUZsb2F0KGVsZW1lbnQuc3R5bGUudG9wICB8fCAwKSAt IChlbGVtZW50Ll9vcmlnaW5hbFRvcCB8fCAwKTsKICAgIHZhciBsZWZ0ID0gcGFy c2VGbG9hdChlbGVtZW50LnN0eWxlLmxlZnQgfHwgMCkgLSAoZWxlbWVudC5fb3Jp Z2luYWxMZWZ0IHx8IDApOwoKICAgIGVsZW1lbnQuc3R5bGUudG9wICAgID0gdG9w ICsgJ3B4JzsKICAgIGVsZW1lbnQuc3R5bGUubGVmdCAgID0gbGVmdCArICdweCc7 CiAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGVsZW1lbnQuX29yaWdpbmFsSGVp Z2h0OwogICAgZWxlbWVudC5zdHlsZS53aWR0aCAgPSBlbGVtZW50Ll9vcmlnaW5h bFdpZHRoOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfSwKCiAgY3VtdWxhdGl2ZVNj cm9sbE9mZnNldDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgdmFyIHZhbHVlVCA9 IDAsIHZhbHVlTCA9IDA7CiAgICBkbyB7CiAgICAgIHZhbHVlVCArPSBlbGVtZW50 LnNjcm9sbFRvcCAgfHwgMDsKICAgICAgdmFsdWVMICs9IGVsZW1lbnQuc2Nyb2xs TGVmdCB8fCAwOwogICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOwog ICAgfSB3aGlsZSAoZWxlbWVudCk7CiAgICByZXR1cm4gRWxlbWVudC5fcmV0dXJu T2Zmc2V0KHZhbHVlTCwgdmFsdWVUKTsKICB9LAoKICBnZXRPZmZzZXRQYXJlbnQ6 IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50Lm9mZnNldFBhcmVu dCkgcmV0dXJuICQoZWxlbWVudC5vZmZzZXRQYXJlbnQpOwogICAgaWYgKGVsZW1l bnQgPT0gZG9jdW1lbnQuYm9keSkgcmV0dXJuICQoZWxlbWVudCk7CgogICAgd2hp bGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKSAmJiBlbGVtZW50ICE9 IGRvY3VtZW50LmJvZHkpCiAgICAgIGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1l bnQsICdwb3NpdGlvbicpICE9ICdzdGF0aWMnKQogICAgICAgIHJldHVybiAkKGVs ZW1lbnQpOwoKICAgIHJldHVybiAkKGRvY3VtZW50LmJvZHkpOwogIH0sCgogIHZp ZXdwb3J0T2Zmc2V0OiBmdW5jdGlvbihmb3JFbGVtZW50KSB7CiAgICB2YXIgdmFs dWVUID0gMCwgdmFsdWVMID0gMDsKCiAgICB2YXIgZWxlbWVudCA9IGZvckVsZW1l bnQ7CiAgICBkbyB7CiAgICAgIHZhbHVlVCArPSBlbGVtZW50Lm9mZnNldFRvcCAg fHwgMDsKICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8fCAwOwoK ICAgICAgLy8gU2FmYXJpIGZpeAogICAgICBpZiAoZWxlbWVudC5vZmZzZXRQYXJl bnQgPT0gZG9jdW1lbnQuYm9keSAmJgogICAgICAgIEVsZW1lbnQuZ2V0U3R5bGUo ZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2Fic29sdXRlJykgYnJlYWs7CgogICAg fSB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50KTsKCiAgICBl bGVtZW50ID0gZm9yRWxlbWVudDsKICAgIGRvIHsKICAgICAgaWYgKCFQcm90b3R5 cGUuQnJvd3Nlci5PcGVyYSB8fCAoZWxlbWVudC50YWdOYW1lICYmIChlbGVtZW50 LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PSAnQk9EWScpKSkgewogICAgICAgIHZh bHVlVCAtPSBlbGVtZW50LnNjcm9sbFRvcCAgfHwgMDsKICAgICAgICB2YWx1ZUwg LT0gZWxlbWVudC5zY3JvbGxMZWZ0IHx8IDA7CiAgICAgIH0KICAgIH0gd2hpbGUg KGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpOwoKICAgIHJldHVybiBFbGVt ZW50Ll9yZXR1cm5PZmZzZXQodmFsdWVMLCB2YWx1ZVQpOwogIH0sCgogIGNsb25l UG9zaXRpb246IGZ1bmN0aW9uKGVsZW1lbnQsIHNvdXJjZSkgewogICAgdmFyIG9w dGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKICAgICAgc2V0TGVmdDogICAgdHJ1ZSwK ICAgICAgc2V0VG9wOiAgICAgdHJ1ZSwKICAgICAgc2V0V2lkdGg6ICAgdHJ1ZSwK ICAgICAgc2V0SGVpZ2h0OiAgdHJ1ZSwKICAgICAgb2Zmc2V0VG9wOiAgMCwKICAg ICAgb2Zmc2V0TGVmdDogMAogICAgfSwgYXJndW1lbnRzWzJdIHx8IHsgfSk7Cgog ICAgLy8gZmluZCBwYWdlIHBvc2l0aW9uIG9mIHNvdXJjZQogICAgc291cmNlID0g JChzb3VyY2UpOwogICAgdmFyIHAgPSBzb3VyY2Uudmlld3BvcnRPZmZzZXQoKTsK CiAgICAvLyBmaW5kIGNvb3JkaW5hdGUgc3lzdGVtIHRvIHVzZQogICAgZWxlbWVu dCA9ICQoZWxlbWVudCk7CiAgICB2YXIgZGVsdGEgPSBbMCwgMF07CiAgICB2YXIg cGFyZW50ID0gbnVsbDsKICAgIC8vIGRlbHRhIFswLDBdIHdpbGwgZG8gZmluZSB3 aXRoIHBvc2l0aW9uOiBmaXhlZCBlbGVtZW50cywKICAgIC8vIHBvc2l0aW9uOmFi c29sdXRlIG5lZWRzIG9mZnNldFBhcmVudCBkZWx0YXMKICAgIGlmIChFbGVtZW50 LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdhYnNvbHV0ZScpIHsK ICAgICAgcGFyZW50ID0gZWxlbWVudC5nZXRPZmZzZXRQYXJlbnQoKTsKICAgICAg ZGVsdGEgPSBwYXJlbnQudmlld3BvcnRPZmZzZXQoKTsKICAgIH0KCiAgICAvLyBj b3JyZWN0IGJ5IGJvZHkgb2Zmc2V0cyAoZml4ZXMgU2FmYXJpKQogICAgaWYgKHBh cmVudCA9PSBkb2N1bWVudC5ib2R5KSB7CiAgICAgIGRlbHRhWzBdIC09IGRvY3Vt ZW50LmJvZHkub2Zmc2V0TGVmdDsKICAgICAgZGVsdGFbMV0gLT0gZG9jdW1lbnQu Ym9keS5vZmZzZXRUb3A7CiAgICB9CgogICAgLy8gc2V0IHBvc2l0aW9uCiAgICBp ZiAob3B0aW9ucy5zZXRMZWZ0KSAgIGVsZW1lbnQuc3R5bGUubGVmdCAgPSAocFsw XSAtIGRlbHRhWzBdICsgb3B0aW9ucy5vZmZzZXRMZWZ0KSArICdweCc7CiAgICBp ZiAob3B0aW9ucy5zZXRUb3ApICAgIGVsZW1lbnQuc3R5bGUudG9wICAgPSAocFsx XSAtIGRlbHRhWzFdICsgb3B0aW9ucy5vZmZzZXRUb3ApICsgJ3B4JzsKICAgIGlm IChvcHRpb25zLnNldFdpZHRoKSAgZWxlbWVudC5zdHlsZS53aWR0aCA9IHNvdXJj ZS5vZmZzZXRXaWR0aCArICdweCc7CiAgICBpZiAob3B0aW9ucy5zZXRIZWlnaHQp IGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gc291cmNlLm9mZnNldEhlaWdodCArICdw eCc7CiAgICByZXR1cm4gZWxlbWVudDsKICB9Cn07CgpFbGVtZW50Lk1ldGhvZHMu aWRlbnRpZnkuY291bnRlciA9IDE7CgpPYmplY3QuZXh0ZW5kKEVsZW1lbnQuTWV0 aG9kcywgewogIGdldEVsZW1lbnRzQnlTZWxlY3RvcjogRWxlbWVudC5NZXRob2Rz LnNlbGVjdCwKICBjaGlsZEVsZW1lbnRzOiBFbGVtZW50Lk1ldGhvZHMuaW1tZWRp YXRlRGVzY2VuZGFudHMKfSk7CgpFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlv bnMgPSB7CiAgd3JpdGU6IHsKICAgIG5hbWVzOiB7CiAgICAgIGNsYXNzTmFtZTog J2NsYXNzJywKICAgICAgaHRtbEZvcjogICAnZm9yJwogICAgfSwKICAgIHZhbHVl czogeyB9CiAgfQp9OwoKaWYgKFByb3RvdHlwZS5Ccm93c2VyLk9wZXJhKSB7CiAg RWxlbWVudC5NZXRob2RzLmdldFN0eWxlID0gRWxlbWVudC5NZXRob2RzLmdldFN0 eWxlLndyYXAoCiAgICBmdW5jdGlvbihwcm9jZWVkLCBlbGVtZW50LCBzdHlsZSkg ewogICAgICBzd2l0Y2ggKHN0eWxlKSB7CiAgICAgICAgY2FzZSAnbGVmdCc6IGNh c2UgJ3RvcCc6IGNhc2UgJ3JpZ2h0JzogY2FzZSAnYm90dG9tJzoKICAgICAgICAg IGlmIChwcm9jZWVkKGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAnc3RhdGljJykg cmV0dXJuIG51bGw7CiAgICAgICAgY2FzZSAnaGVpZ2h0JzogY2FzZSAnd2lkdGgn OgogICAgICAgICAgLy8gcmV0dXJucyAnMHB4JyBmb3IgaGlkZGVuIGVsZW1lbnRz OyB3ZSB3YW50IGl0IHRvIHJldHVybiBudWxsCiAgICAgICAgICBpZiAoIUVsZW1l bnQudmlzaWJsZShlbGVtZW50KSkgcmV0dXJuIG51bGw7CgogICAgICAgICAgLy8g cmV0dXJucyB0aGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIHJhdGhlciB0aGFuIHRo ZSBjb250ZW50LWJveAogICAgICAgICAgLy8gZGltZW5zaW9ucywgc28gd2Ugc3Vi dHJhY3QgcGFkZGluZyBhbmQgYm9yZGVycyBmcm9tIHRoZSB2YWx1ZQogICAgICAg ICAgdmFyIGRpbSA9IHBhcnNlSW50KHByb2NlZWQoZWxlbWVudCwgc3R5bGUpLCAx MCk7CgogICAgICAgICAgaWYgKGRpbSAhPT0gZWxlbWVudFsnb2Zmc2V0JyArIHN0 eWxlLmNhcGl0YWxpemUoKV0pCiAgICAgICAgICAgIHJldHVybiBkaW0gKyAncHgn OwoKICAgICAgICAgIHZhciBwcm9wZXJ0aWVzOwogICAgICAgICAgaWYgKHN0eWxl ID09PSAnaGVpZ2h0JykgewogICAgICAgICAgICBwcm9wZXJ0aWVzID0gWydib3Jk ZXItdG9wLXdpZHRoJywgJ3BhZGRpbmctdG9wJywKICAgICAgICAgICAgICdwYWRk aW5nLWJvdHRvbScsICdib3JkZXItYm90dG9tLXdpZHRoJ107CiAgICAgICAgICB9 CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHJvcGVydGllcyA9IFsnYm9y ZGVyLWxlZnQtd2lkdGgnLCAncGFkZGluZy1sZWZ0JywKICAgICAgICAgICAgICdw YWRkaW5nLXJpZ2h0JywgJ2JvcmRlci1yaWdodC13aWR0aCddOwogICAgICAgICAg fQogICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMuaW5qZWN0KGRpbSwgZnVuY3Rp b24obWVtbywgcHJvcGVydHkpIHsKICAgICAgICAgICAgdmFyIHZhbCA9IHByb2Nl ZWQoZWxlbWVudCwgcHJvcGVydHkpOwogICAgICAgICAgICByZXR1cm4gdmFsID09 PSBudWxsID8gbWVtbyA6IG1lbW8gLSBwYXJzZUludCh2YWwsIDEwKTsKICAgICAg ICAgIH0pICsgJ3B4JzsKICAgICAgICBkZWZhdWx0OiByZXR1cm4gcHJvY2VlZChl bGVtZW50LCBzdHlsZSk7CiAgICAgIH0KICAgIH0KICApOwoKICBFbGVtZW50Lk1l dGhvZHMucmVhZEF0dHJpYnV0ZSA9IEVsZW1lbnQuTWV0aG9kcy5yZWFkQXR0cmli dXRlLndyYXAoCiAgICBmdW5jdGlvbihwcm9jZWVkLCBlbGVtZW50LCBhdHRyaWJ1 dGUpIHsKICAgICAgaWYgKGF0dHJpYnV0ZSA9PT0gJ3RpdGxlJykgcmV0dXJuIGVs ZW1lbnQudGl0bGU7CiAgICAgIHJldHVybiBwcm9jZWVkKGVsZW1lbnQsIGF0dHJp YnV0ZSk7CiAgICB9CiAgKTsKfQoKZWxzZSBpZiAoUHJvdG90eXBlLkJyb3dzZXIu SUUpIHsKICAvLyBJRSBkb2Vzbid0IHJlcG9ydCBvZmZzZXRzIGNvcnJlY3RseSBm b3Igc3RhdGljIGVsZW1lbnRzLCBzbyB3ZSBjaGFuZ2UgdGhlbQogIC8vIHRvICJy ZWxhdGl2ZSIgdG8gZ2V0IHRoZSB2YWx1ZXMsIHRoZW4gY2hhbmdlIHRoZW0gYmFj ay4KICBFbGVtZW50Lk1ldGhvZHMuZ2V0T2Zmc2V0UGFyZW50ID0gRWxlbWVudC5N ZXRob2RzLmdldE9mZnNldFBhcmVudC53cmFwKAogICAgZnVuY3Rpb24ocHJvY2Vl ZCwgZWxlbWVudCkgewogICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgICAg Ly8gSUUgdGhyb3dzIGFuIGVycm9yIGlmIGVsZW1lbnQgaXMgbm90IGluIGRvY3Vt ZW50CiAgICAgIHRyeSB7IGVsZW1lbnQub2Zmc2V0UGFyZW50IH0KICAgICAgY2F0 Y2goZSkgeyByZXR1cm4gJChkb2N1bWVudC5ib2R5KSB9CiAgICAgIHZhciBwb3Np dGlvbiA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0aW9uJyk7CiAgICAgIGlmIChw b3NpdGlvbiAhPT0gJ3N0YXRpYycpIHJldHVybiBwcm9jZWVkKGVsZW1lbnQpOwog ICAgICBlbGVtZW50LnNldFN0eWxlKHsgcG9zaXRpb246ICdyZWxhdGl2ZScgfSk7 CiAgICAgIHZhciB2YWx1ZSA9IHByb2NlZWQoZWxlbWVudCk7CiAgICAgIGVsZW1l bnQuc2V0U3R5bGUoeyBwb3NpdGlvbjogcG9zaXRpb24gfSk7CiAgICAgIHJldHVy biB2YWx1ZTsKICAgIH0KICApOwoKICAkdygncG9zaXRpb25lZE9mZnNldCB2aWV3 cG9ydE9mZnNldCcpLmVhY2goZnVuY3Rpb24obWV0aG9kKSB7CiAgICBFbGVtZW50 Lk1ldGhvZHNbbWV0aG9kXSA9IEVsZW1lbnQuTWV0aG9kc1ttZXRob2RdLndyYXAo CiAgICAgIGZ1bmN0aW9uKHByb2NlZWQsIGVsZW1lbnQpIHsKICAgICAgICBlbGVt ZW50ID0gJChlbGVtZW50KTsKICAgICAgICB0cnkgeyBlbGVtZW50Lm9mZnNldFBh cmVudCB9CiAgICAgICAgY2F0Y2goZSkgeyByZXR1cm4gRWxlbWVudC5fcmV0dXJu T2Zmc2V0KDAsMCkgfQogICAgICAgIHZhciBwb3NpdGlvbiA9IGVsZW1lbnQuZ2V0 U3R5bGUoJ3Bvc2l0aW9uJyk7CiAgICAgICAgaWYgKHBvc2l0aW9uICE9PSAnc3Rh dGljJykgcmV0dXJuIHByb2NlZWQoZWxlbWVudCk7CiAgICAgICAgLy8gVHJpZ2dl ciBoYXNMYXlvdXQgb24gdGhlIG9mZnNldCBwYXJlbnQgc28gdGhhdCBJRTYgcmVw b3J0cwogICAgICAgIC8vIGFjY3VyYXRlIG9mZnNldFRvcCBhbmQgb2Zmc2V0TGVm dCB2YWx1ZXMgZm9yIHBvc2l0aW9uOiBmaXhlZC4KICAgICAgICB2YXIgb2Zmc2V0 UGFyZW50ID0gZWxlbWVudC5nZXRPZmZzZXRQYXJlbnQoKTsKICAgICAgICBpZiAo b2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudC5nZXRTdHlsZSgncG9zaXRpb24n KSA9PT0gJ2ZpeGVkJykKICAgICAgICAgIG9mZnNldFBhcmVudC5zZXRTdHlsZSh7 IHpvb206IDEgfSk7CiAgICAgICAgZWxlbWVudC5zZXRTdHlsZSh7IHBvc2l0aW9u OiAncmVsYXRpdmUnIH0pOwogICAgICAgIHZhciB2YWx1ZSA9IHByb2NlZWQoZWxl bWVudCk7CiAgICAgICAgZWxlbWVudC5zZXRTdHlsZSh7IHBvc2l0aW9uOiBwb3Np dGlvbiB9KTsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0KICAgICk7CiAg fSk7CgogIEVsZW1lbnQuTWV0aG9kcy5jdW11bGF0aXZlT2Zmc2V0ID0gRWxlbWVu dC5NZXRob2RzLmN1bXVsYXRpdmVPZmZzZXQud3JhcCgKICAgIGZ1bmN0aW9uKHBy b2NlZWQsIGVsZW1lbnQpIHsKICAgICAgdHJ5IHsgZWxlbWVudC5vZmZzZXRQYXJl bnQgfQogICAgICBjYXRjaChlKSB7IHJldHVybiBFbGVtZW50Ll9yZXR1cm5PZmZz ZXQoMCwwKSB9CiAgICAgIHJldHVybiBwcm9jZWVkKGVsZW1lbnQpOwogICAgfQog ICk7CgogIEVsZW1lbnQuTWV0aG9kcy5nZXRTdHlsZSA9IGZ1bmN0aW9uKGVsZW1l bnQsIHN0eWxlKSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHN0eWxl ID0gKHN0eWxlID09ICdmbG9hdCcgfHwgc3R5bGUgPT0gJ2Nzc0Zsb2F0JykgPyAn c3R5bGVGbG9hdCcgOiBzdHlsZS5jYW1lbGl6ZSgpOwogICAgdmFyIHZhbHVlID0g ZWxlbWVudC5zdHlsZVtzdHlsZV07CiAgICBpZiAoIXZhbHVlICYmIGVsZW1lbnQu Y3VycmVudFN0eWxlKSB2YWx1ZSA9IGVsZW1lbnQuY3VycmVudFN0eWxlW3N0eWxl XTsKCiAgICBpZiAoc3R5bGUgPT0gJ29wYWNpdHknKSB7CiAgICAgIGlmICh2YWx1 ZSA9IChlbGVtZW50LmdldFN0eWxlKCdmaWx0ZXInKSB8fCAnJykubWF0Y2goL2Fs cGhhXChvcGFjaXR5PSguKilcKS8pKQogICAgICAgIGlmICh2YWx1ZVsxXSkgcmV0 dXJuIHBhcnNlRmxvYXQodmFsdWVbMV0pIC8gMTAwOwogICAgICByZXR1cm4gMS4w OwogICAgfQoKICAgIGlmICh2YWx1ZSA9PSAnYXV0bycpIHsKICAgICAgaWYgKChz dHlsZSA9PSAnd2lkdGgnIHx8IHN0eWxlID09ICdoZWlnaHQnKSAmJiAoZWxlbWVu dC5nZXRTdHlsZSgnZGlzcGxheScpICE9ICdub25lJykpCiAgICAgICAgcmV0dXJu IGVsZW1lbnRbJ29mZnNldCcgKyBzdHlsZS5jYXBpdGFsaXplKCldICsgJ3B4JzsK ICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfTsK CiAgRWxlbWVudC5NZXRob2RzLnNldE9wYWNpdHkgPSBmdW5jdGlvbihlbGVtZW50 LCB2YWx1ZSkgewogICAgZnVuY3Rpb24gc3RyaXBBbHBoYShmaWx0ZXIpewogICAg ICByZXR1cm4gZmlsdGVyLnJlcGxhY2UoL2FscGhhXChbXlwpXSpcKS9naSwnJyk7 CiAgICB9CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHZhciBjdXJyZW50 U3R5bGUgPSBlbGVtZW50LmN1cnJlbnRTdHlsZTsKICAgIGlmICgoY3VycmVudFN0 eWxlICYmICFjdXJyZW50U3R5bGUuaGFzTGF5b3V0KSB8fAogICAgICAoIWN1cnJl bnRTdHlsZSAmJiBlbGVtZW50LnN0eWxlLnpvb20gPT0gJ25vcm1hbCcpKQogICAg ICAgIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7CgogICAgdmFyIGZpbHRlciA9IGVs ZW1lbnQuZ2V0U3R5bGUoJ2ZpbHRlcicpLCBzdHlsZSA9IGVsZW1lbnQuc3R5bGU7 CiAgICBpZiAodmFsdWUgPT0gMSB8fCB2YWx1ZSA9PT0gJycpIHsKICAgICAgKGZp bHRlciA9IHN0cmlwQWxwaGEoZmlsdGVyKSkgPwogICAgICAgIHN0eWxlLmZpbHRl ciA9IGZpbHRlciA6IHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7CiAg ICAgIHJldHVybiBlbGVtZW50OwogICAgfSBlbHNlIGlmICh2YWx1ZSA8IDAuMDAw MDEpIHZhbHVlID0gMDsKICAgIHN0eWxlLmZpbHRlciA9IHN0cmlwQWxwaGEoZmls dGVyKSArCiAgICAgICdhbHBoYShvcGFjaXR5PScgKyAodmFsdWUgKiAxMDApICsg JyknOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfTsKCiAgRWxlbWVudC5fYXR0cmli dXRlVHJhbnNsYXRpb25zID0gewogICAgcmVhZDogewogICAgICBuYW1lczogewog ICAgICAgICdjbGFzcyc6ICdjbGFzc05hbWUnLAogICAgICAgICdmb3InOiAgICdo dG1sRm9yJwogICAgICB9LAogICAgICB2YWx1ZXM6IHsKICAgICAgICBfZ2V0QXR0 cjogZnVuY3Rpb24oZWxlbWVudCwgYXR0cmlidXRlKSB7CiAgICAgICAgICByZXR1 cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCAyKTsKICAgICAgICB9 LAogICAgICAgIF9nZXRBdHRyTm9kZTogZnVuY3Rpb24oZWxlbWVudCwgYXR0cmli dXRlKSB7CiAgICAgICAgICB2YXIgbm9kZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRl Tm9kZShhdHRyaWJ1dGUpOwogICAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLnZh bHVlIDogIiI7CiAgICAgICAgfSwKICAgICAgICBfZ2V0RXY6IGZ1bmN0aW9uKGVs ZW1lbnQsIGF0dHJpYnV0ZSkgewogICAgICAgICAgYXR0cmlidXRlID0gZWxlbWVu dC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTsKICAgICAgICAgIHJldHVybiBhdHRy aWJ1dGUgPyBhdHRyaWJ1dGUudG9TdHJpbmcoKS5zbGljZSgyMywgLTIpIDogbnVs bDsKICAgICAgICB9LAogICAgICAgIF9mbGFnOiBmdW5jdGlvbihlbGVtZW50LCBh dHRyaWJ1dGUpIHsKICAgICAgICAgIHJldHVybiAkKGVsZW1lbnQpLmhhc0F0dHJp YnV0ZShhdHRyaWJ1dGUpID8gYXR0cmlidXRlIDogbnVsbDsKICAgICAgICB9LAog ICAgICAgIHN0eWxlOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgICAgICByZXR1 cm4gZWxlbWVudC5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCk7CiAgICAgICAg fSwKICAgICAgICB0aXRsZTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgICAg cmV0dXJuIGVsZW1lbnQudGl0bGU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAg fTsKCiAgRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLndyaXRlID0gewog ICAgbmFtZXM6IE9iamVjdC5leHRlbmQoewogICAgICBjZWxscGFkZGluZzogJ2Nl bGxQYWRkaW5nJywKICAgICAgY2VsbHNwYWNpbmc6ICdjZWxsU3BhY2luZycKICAg IH0sIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy5yZWFkLm5hbWVzKSwK ICAgIHZhbHVlczogewogICAgICBjaGVja2VkOiBmdW5jdGlvbihlbGVtZW50LCB2 YWx1ZSkgewogICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9ICEhdmFsdWU7CiAgICAg IH0sCgogICAgICBzdHlsZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKICAg ICAgICBlbGVtZW50LnN0eWxlLmNzc1RleHQgPSB2YWx1ZSA/IHZhbHVlIDogJyc7 CiAgICAgIH0KICAgIH0KICB9OwoKICBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xh dGlvbnMuaGFzID0ge307CgogICR3KCdjb2xTcGFuIHJvd1NwYW4gdkFsaWduIGRh dGVUaW1lIGFjY2Vzc0tleSB0YWJJbmRleCAnICsKICAgICAgJ2VuY1R5cGUgbWF4 TGVuZ3RoIHJlYWRPbmx5IGxvbmdEZXNjIGZyYW1lQm9yZGVyJykuZWFjaChmdW5j dGlvbihhdHRyKSB7CiAgICBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMu d3JpdGUubmFtZXNbYXR0ci50b0xvd2VyQ2FzZSgpXSA9IGF0dHI7CiAgICBFbGVt ZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMuaGFzW2F0dHIudG9Mb3dlckNhc2Uo KV0gPSBhdHRyOwogIH0pOwoKICAoZnVuY3Rpb24odikgewogICAgT2JqZWN0LmV4 dGVuZCh2LCB7CiAgICAgIGhyZWY6ICAgICAgICB2Ll9nZXRBdHRyLAogICAgICBz cmM6ICAgICAgICAgdi5fZ2V0QXR0ciwKICAgICAgdHlwZTogICAgICAgIHYuX2dl dEF0dHIsCiAgICAgIGFjdGlvbjogICAgICB2Ll9nZXRBdHRyTm9kZSwKICAgICAg ZGlzYWJsZWQ6ICAgIHYuX2ZsYWcsCiAgICAgIGNoZWNrZWQ6ICAgICB2Ll9mbGFn LAogICAgICByZWFkb25seTogICAgdi5fZmxhZywKICAgICAgbXVsdGlwbGU6ICAg IHYuX2ZsYWcsCiAgICAgIG9ubG9hZDogICAgICB2Ll9nZXRFdiwKICAgICAgb251 bmxvYWQ6ICAgIHYuX2dldEV2LAogICAgICBvbmNsaWNrOiAgICAgdi5fZ2V0RXYs CiAgICAgIG9uZGJsY2xpY2s6ICB2Ll9nZXRFdiwKICAgICAgb25tb3VzZWRvd246 IHYuX2dldEV2LAogICAgICBvbm1vdXNldXA6ICAgdi5fZ2V0RXYsCiAgICAgIG9u bW91c2VvdmVyOiB2Ll9nZXRFdiwKICAgICAgb25tb3VzZW1vdmU6IHYuX2dldEV2 LAogICAgICBvbm1vdXNlb3V0OiAgdi5fZ2V0RXYsCiAgICAgIG9uZm9jdXM6ICAg ICB2Ll9nZXRFdiwKICAgICAgb25ibHVyOiAgICAgIHYuX2dldEV2LAogICAgICBv bmtleXByZXNzOiAgdi5fZ2V0RXYsCiAgICAgIG9ua2V5ZG93bjogICB2Ll9nZXRF diwKICAgICAgb25rZXl1cDogICAgIHYuX2dldEV2LAogICAgICBvbnN1Ym1pdDog ICAgdi5fZ2V0RXYsCiAgICAgIG9ucmVzZXQ6ICAgICB2Ll9nZXRFdiwKICAgICAg b25zZWxlY3Q6ICAgIHYuX2dldEV2LAogICAgICBvbmNoYW5nZTogICAgdi5fZ2V0 RXYKICAgIH0pOwogIH0pKEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy5y ZWFkLnZhbHVlcyk7Cn0KCmVsc2UgaWYgKFByb3RvdHlwZS5Ccm93c2VyLkdlY2tv ICYmIC9ydjoxXC44XC4wLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7CiAg RWxlbWVudC5NZXRob2RzLnNldE9wYWNpdHkgPSBmdW5jdGlvbihlbGVtZW50LCB2 YWx1ZSkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBlbGVtZW50LnN0 eWxlLm9wYWNpdHkgPSAodmFsdWUgPT0gMSkgPyAwLjk5OTk5OSA6CiAgICAgICh2 YWx1ZSA9PT0gJycpID8gJycgOiAodmFsdWUgPCAwLjAwMDAxKSA/IDAgOiB2YWx1 ZTsKICAgIHJldHVybiBlbGVtZW50OwogIH07Cn0KCmVsc2UgaWYgKFByb3RvdHlw ZS5Ccm93c2VyLldlYktpdCkgewogIEVsZW1lbnQuTWV0aG9kcy5zZXRPcGFjaXR5 ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKICAgIGVsZW1lbnQgPSAkKGVs ZW1lbnQpOwogICAgZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gKHZhbHVlID09IDEg fHwgdmFsdWUgPT09ICcnKSA/ICcnIDoKICAgICAgKHZhbHVlIDwgMC4wMDAwMSkg PyAwIDogdmFsdWU7CgogICAgaWYgKHZhbHVlID09IDEpCiAgICAgIGlmKGVsZW1l bnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09ICdJTUcnICYmIGVsZW1lbnQud2lk dGgpIHsKICAgICAgICBlbGVtZW50LndpZHRoKys7IGVsZW1lbnQud2lkdGgtLTsK ICAgICAgfSBlbHNlIHRyeSB7CiAgICAgICAgdmFyIG4gPSBkb2N1bWVudC5jcmVh dGVUZXh0Tm9kZSgnICcpOwogICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobik7 CiAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChuKTsKICAgICAgfSBjYXRjaCAo ZSkgeyB9CgogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfTsKCiAgLy8gU2FmYXJpIHJl dHVybnMgbWFyZ2lucyBvbiBib2R5IHdoaWNoIGlzIGluY29ycmVjdCBpZiB0aGUg Y2hpbGQgaXMgYWJzb2x1dGVseQogIC8vIHBvc2l0aW9uZWQuICBGb3IgcGVyZm9y bWFuY2UgcmVhc29ucywgcmVkZWZpbmUgRWxlbWVudCNjdW11bGF0aXZlT2Zmc2V0 IGZvcgogIC8vIEtIVE1ML1dlYktpdCBvbmx5LgogIEVsZW1lbnQuTWV0aG9kcy5j dW11bGF0aXZlT2Zmc2V0ID0gZnVuY3Rpb24oZWxlbWVudCkgewogICAgdmFyIHZh bHVlVCA9IDAsIHZhbHVlTCA9IDA7CiAgICBkbyB7CiAgICAgIHZhbHVlVCArPSBl bGVtZW50Lm9mZnNldFRvcCAgfHwgMDsKICAgICAgdmFsdWVMICs9IGVsZW1lbnQu b2Zmc2V0TGVmdCB8fCAwOwogICAgICBpZiAoZWxlbWVudC5vZmZzZXRQYXJlbnQg PT0gZG9jdW1lbnQuYm9keSkKICAgICAgICBpZiAoRWxlbWVudC5nZXRTdHlsZShl bGVtZW50LCAncG9zaXRpb24nKSA9PSAnYWJzb2x1dGUnKSBicmVhazsKCiAgICAg IGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDsKICAgIH0gd2hpbGUgKGVs ZW1lbnQpOwoKICAgIHJldHVybiBFbGVtZW50Ll9yZXR1cm5PZmZzZXQodmFsdWVM LCB2YWx1ZVQpOwogIH07Cn0KCmlmIChQcm90b3R5cGUuQnJvd3Nlci5JRSB8fCBQ cm90b3R5cGUuQnJvd3Nlci5PcGVyYSkgewogIC8vIElFIGFuZCBPcGVyYSBhcmUg bWlzc2luZyAuaW5uZXJIVE1MIHN1cHBvcnQgZm9yIFRBQkxFLXJlbGF0ZWQgYW5k IFNFTEVDVCBlbGVtZW50cwogIEVsZW1lbnQuTWV0aG9kcy51cGRhdGUgPSBmdW5j dGlvbihlbGVtZW50LCBjb250ZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50 KTsKCiAgICBpZiAoY29udGVudCAmJiBjb250ZW50LnRvRWxlbWVudCkgY29udGVu dCA9IGNvbnRlbnQudG9FbGVtZW50KCk7CiAgICBpZiAoT2JqZWN0LmlzRWxlbWVu dChjb250ZW50KSkgcmV0dXJuIGVsZW1lbnQudXBkYXRlKCkuaW5zZXJ0KGNvbnRl bnQpOwoKICAgIGNvbnRlbnQgPSBPYmplY3QudG9IVE1MKGNvbnRlbnQpOwogICAg dmFyIHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKTsKCiAg ICBpZiAodGFnTmFtZSBpbiBFbGVtZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlvbnMu dGFncykgewogICAgICAkQShlbGVtZW50LmNoaWxkTm9kZXMpLmVhY2goZnVuY3Rp b24obm9kZSkgeyBlbGVtZW50LnJlbW92ZUNoaWxkKG5vZGUpIH0pOwogICAgICBF bGVtZW50Ll9nZXRDb250ZW50RnJvbUFub255bW91c0VsZW1lbnQodGFnTmFtZSwg Y29udGVudC5zdHJpcFNjcmlwdHMoKSkKICAgICAgICAuZWFjaChmdW5jdGlvbihu b2RlKSB7IGVsZW1lbnQuYXBwZW5kQ2hpbGQobm9kZSkgfSk7CiAgICB9CiAgICBl bHNlIGVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudC5zdHJpcFNjcmlwdHMoKTsK CiAgICBjb250ZW50LmV2YWxTY3JpcHRzLmJpbmQoY29udGVudCkuZGVmZXIoKTsK ICAgIHJldHVybiBlbGVtZW50OwogIH07Cn0KCmlmICgnb3V0ZXJIVE1MJyBpbiBk b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkgewogIEVsZW1lbnQuTWV0aG9k cy5yZXBsYWNlID0gZnVuY3Rpb24oZWxlbWVudCwgY29udGVudCkgewogICAgZWxl bWVudCA9ICQoZWxlbWVudCk7CgogICAgaWYgKGNvbnRlbnQgJiYgY29udGVudC50 b0VsZW1lbnQpIGNvbnRlbnQgPSBjb250ZW50LnRvRWxlbWVudCgpOwogICAgaWYg KE9iamVjdC5pc0VsZW1lbnQoY29udGVudCkpIHsKICAgICAgZWxlbWVudC5wYXJl bnROb2RlLnJlcGxhY2VDaGlsZChjb250ZW50LCBlbGVtZW50KTsKICAgICAgcmV0 dXJuIGVsZW1lbnQ7CiAgICB9CgogICAgY29udGVudCA9IE9iamVjdC50b0hUTUwo Y29udGVudCk7CiAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlLCB0 YWdOYW1lID0gcGFyZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKTsKCiAgICBpZiAo RWxlbWVudC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zLnRhZ3NbdGFnTmFtZV0pIHsK ICAgICAgdmFyIG5leHRTaWJsaW5nID0gZWxlbWVudC5uZXh0KCk7CiAgICAgIHZh ciBmcmFnbWVudHMgPSBFbGVtZW50Ll9nZXRDb250ZW50RnJvbUFub255bW91c0Vs ZW1lbnQodGFnTmFtZSwgY29udGVudC5zdHJpcFNjcmlwdHMoKSk7CiAgICAgIHBh cmVudC5yZW1vdmVDaGlsZChlbGVtZW50KTsKICAgICAgaWYgKG5leHRTaWJsaW5n KQogICAgICAgIGZyYWdtZW50cy5lYWNoKGZ1bmN0aW9uKG5vZGUpIHsgcGFyZW50 Lmluc2VydEJlZm9yZShub2RlLCBuZXh0U2libGluZykgfSk7CiAgICAgIGVsc2UK ICAgICAgICBmcmFnbWVudHMuZWFjaChmdW5jdGlvbihub2RlKSB7IHBhcmVudC5h cHBlbmRDaGlsZChub2RlKSB9KTsKICAgIH0KICAgIGVsc2UgZWxlbWVudC5vdXRl ckhUTUwgPSBjb250ZW50LnN0cmlwU2NyaXB0cygpOwoKICAgIGNvbnRlbnQuZXZh bFNjcmlwdHMuYmluZChjb250ZW50KS5kZWZlcigpOwogICAgcmV0dXJuIGVsZW1l bnQ7CiAgfTsKfQoKRWxlbWVudC5fcmV0dXJuT2Zmc2V0ID0gZnVuY3Rpb24obCwg dCkgewogIHZhciByZXN1bHQgPSBbbCwgdF07CiAgcmVzdWx0LmxlZnQgPSBsOwog IHJlc3VsdC50b3AgPSB0OwogIHJldHVybiByZXN1bHQ7Cn07CgpFbGVtZW50Ll9n ZXRDb250ZW50RnJvbUFub255bW91c0VsZW1lbnQgPSBmdW5jdGlvbih0YWdOYW1l LCBodG1sKSB7CiAgdmFyIGRpdiA9IG5ldyBFbGVtZW50KCdkaXYnKSwgdCA9IEVs ZW1lbnQuX2luc2VydGlvblRyYW5zbGF0aW9ucy50YWdzW3RhZ05hbWVdOwogIGlm ICh0KSB7CiAgICBkaXYuaW5uZXJIVE1MID0gdFswXSArIGh0bWwgKyB0WzFdOwog ICAgdFsyXS50aW1lcyhmdW5jdGlvbigpIHsgZGl2ID0gZGl2LmZpcnN0Q2hpbGQg fSk7CiAgfSBlbHNlIGRpdi5pbm5lckhUTUwgPSBodG1sOwogIHJldHVybiAkQShk aXYuY2hpbGROb2Rlcyk7Cn07CgpFbGVtZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlv bnMgPSB7CiAgYmVmb3JlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7CiAgICBl bGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIGVsZW1lbnQpOwog IH0sCiAgdG9wOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7CiAgICBlbGVtZW50 Lmluc2VydEJlZm9yZShub2RlLCBlbGVtZW50LmZpcnN0Q2hpbGQpOwogIH0sCiAg Ym90dG9tOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7CiAgICBlbGVtZW50LmFw cGVuZENoaWxkKG5vZGUpOwogIH0sCiAgYWZ0ZXI6IGZ1bmN0aW9uKGVsZW1lbnQs IG5vZGUpIHsKICAgIGVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9k ZSwgZWxlbWVudC5uZXh0U2libGluZyk7CiAgfSwKICB0YWdzOiB7CiAgICBUQUJM RTogIFsnPHRhYmxlPicsICAgICAgICAgICAgICAgICc8L3RhYmxlPicsICAgICAg ICAgICAgICAgICAgIDFdLAogICAgVEJPRFk6ICBbJzx0YWJsZT48dGJvZHk+Jywg ICAgICAgICAnPC90Ym9keT48L3RhYmxlPicsICAgICAgICAgICAyXSwKICAgIFRS OiAgICAgWyc8dGFibGU+PHRib2R5Pjx0cj4nLCAgICAgJzwvdHI+PC90Ym9keT48 L3RhYmxlPicsICAgICAgM10sCiAgICBURDogICAgIFsnPHRhYmxlPjx0Ym9keT48 dHI+PHRkPicsICc8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPicsIDRdLAogICAg U0VMRUNUOiBbJzxzZWxlY3Q+JywgICAgICAgICAgICAgICAnPC9zZWxlY3Q+Jywg ICAgICAgICAgICAgICAgICAxXQogIH0KfTsKCihmdW5jdGlvbigpIHsKICBPYmpl Y3QuZXh0ZW5kKHRoaXMudGFncywgewogICAgVEhFQUQ6IHRoaXMudGFncy5UQk9E WSwKICAgIFRGT09UOiB0aGlzLnRhZ3MuVEJPRFksCiAgICBUSDogICAgdGhpcy50 YWdzLlRECiAgfSk7Cn0pLmNhbGwoRWxlbWVudC5faW5zZXJ0aW9uVHJhbnNsYXRp b25zKTsKCkVsZW1lbnQuTWV0aG9kcy5TaW11bGF0ZWQgPSB7CiAgaGFzQXR0cmli dXRlOiBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGUpIHsKICAgIGF0dHJpYnV0 ZSA9IEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy5oYXNbYXR0cmlidXRl XSB8fCBhdHRyaWJ1dGU7CiAgICB2YXIgbm9kZSA9ICQoZWxlbWVudCkuZ2V0QXR0 cmlidXRlTm9kZShhdHRyaWJ1dGUpOwogICAgcmV0dXJuICEhKG5vZGUgJiYgbm9k ZS5zcGVjaWZpZWQpOwogIH0KfTsKCkVsZW1lbnQuTWV0aG9kcy5CeVRhZyA9IHsg fTsKCk9iamVjdC5leHRlbmQoRWxlbWVudCwgRWxlbWVudC5NZXRob2RzKTsKCmlm ICghUHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcy5FbGVtZW50RXh0ZW5zaW9ucyAm JgogICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylbJ19fcHJvdG9fXydd KSB7CiAgd2luZG93LkhUTUxFbGVtZW50ID0geyB9OwogIHdpbmRvdy5IVE1MRWxl bWVudC5wcm90b3R5cGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVsn X19wcm90b19fJ107CiAgUHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcy5FbGVtZW50 RXh0ZW5zaW9ucyA9IHRydWU7Cn0KCkVsZW1lbnQuZXh0ZW5kID0gKGZ1bmN0aW9u KCkgewogIGlmIChQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLlNwZWNpZmljRWxl bWVudEV4dGVuc2lvbnMpCiAgICByZXR1cm4gUHJvdG90eXBlLks7CgogIHZhciBN ZXRob2RzID0geyB9LCBCeVRhZyA9IEVsZW1lbnQuTWV0aG9kcy5CeVRhZzsKCiAg dmFyIGV4dGVuZCA9IE9iamVjdC5leHRlbmQoZnVuY3Rpb24oZWxlbWVudCkgewog ICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQuX2V4dGVuZGVkQnlQcm90b3R5cGUg fHwKICAgICAgICBlbGVtZW50Lm5vZGVUeXBlICE9IDEgfHwgZWxlbWVudCA9PSB3 aW5kb3cpIHJldHVybiBlbGVtZW50OwoKICAgIHZhciBtZXRob2RzID0gT2JqZWN0 LmNsb25lKE1ldGhvZHMpLAogICAgICB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1l LnRvVXBwZXJDYXNlKCksIHByb3BlcnR5LCB2YWx1ZTsKCiAgICAvLyBleHRlbmQg bWV0aG9kcyBmb3Igc3BlY2lmaWMgdGFncwogICAgaWYgKEJ5VGFnW3RhZ05hbWVd KSBPYmplY3QuZXh0ZW5kKG1ldGhvZHMsIEJ5VGFnW3RhZ05hbWVdKTsKCiAgICBm b3IgKHByb3BlcnR5IGluIG1ldGhvZHMpIHsKICAgICAgdmFsdWUgPSBtZXRob2Rz W3Byb3BlcnR5XTsKICAgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHZhbHVlKSAm JiAhKHByb3BlcnR5IGluIGVsZW1lbnQpKQogICAgICAgIGVsZW1lbnRbcHJvcGVy dHldID0gdmFsdWUubWV0aG9kaXplKCk7CiAgICB9CgogICAgZWxlbWVudC5fZXh0 ZW5kZWRCeVByb3RvdHlwZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwogICAg cmV0dXJuIGVsZW1lbnQ7CgogIH0sIHsKICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkg ewogICAgICAvLyBleHRlbmQgbWV0aG9kcyBmb3IgYWxsIHRhZ3MgKFNhZmFyaSBk b2Vzbid0IG5lZWQgdGhpcykKICAgICAgaWYgKCFQcm90b3R5cGUuQnJvd3NlckZl YXR1cmVzLkVsZW1lbnRFeHRlbnNpb25zKSB7CiAgICAgICAgT2JqZWN0LmV4dGVu ZChNZXRob2RzLCBFbGVtZW50Lk1ldGhvZHMpOwogICAgICAgIE9iamVjdC5leHRl bmQoTWV0aG9kcywgRWxlbWVudC5NZXRob2RzLlNpbXVsYXRlZCk7CiAgICAgIH0K ICAgIH0KICB9KTsKCiAgZXh0ZW5kLnJlZnJlc2goKTsKICByZXR1cm4gZXh0ZW5k Owp9KSgpOwoKRWxlbWVudC5oYXNBdHRyaWJ1dGUgPSBmdW5jdGlvbihlbGVtZW50 LCBhdHRyaWJ1dGUpIHsKICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUpIHJldHVy biBlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpOwogIHJldHVybiBFbGVt ZW50Lk1ldGhvZHMuU2ltdWxhdGVkLmhhc0F0dHJpYnV0ZShlbGVtZW50LCBhdHRy aWJ1dGUpOwp9OwoKRWxlbWVudC5hZGRNZXRob2RzID0gZnVuY3Rpb24obWV0aG9k cykgewogIHZhciBGID0gUHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcywgVCA9IEVs ZW1lbnQuTWV0aG9kcy5CeVRhZzsKCiAgaWYgKCFtZXRob2RzKSB7CiAgICBPYmpl Y3QuZXh0ZW5kKEZvcm0sIEZvcm0uTWV0aG9kcyk7CiAgICBPYmplY3QuZXh0ZW5k KEZvcm0uRWxlbWVudCwgRm9ybS5FbGVtZW50Lk1ldGhvZHMpOwogICAgT2JqZWN0 LmV4dGVuZChFbGVtZW50Lk1ldGhvZHMuQnlUYWcsIHsKICAgICAgIkZPUk0iOiAg ICAgT2JqZWN0LmNsb25lKEZvcm0uTWV0aG9kcyksCiAgICAgICJJTlBVVCI6ICAg IE9iamVjdC5jbG9uZShGb3JtLkVsZW1lbnQuTWV0aG9kcyksCiAgICAgICJTRUxF Q1QiOiAgIE9iamVjdC5jbG9uZShGb3JtLkVsZW1lbnQuTWV0aG9kcyksCiAgICAg ICJURVhUQVJFQSI6IE9iamVjdC5jbG9uZShGb3JtLkVsZW1lbnQuTWV0aG9kcykK ICAgIH0pOwogIH0KCiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAg dmFyIHRhZ05hbWUgPSBtZXRob2RzOwogICAgbWV0aG9kcyA9IGFyZ3VtZW50c1sx XTsKICB9CgogIGlmICghdGFnTmFtZSkgT2JqZWN0LmV4dGVuZChFbGVtZW50Lk1l dGhvZHMsIG1ldGhvZHMgfHwgeyB9KTsKICBlbHNlIHsKICAgIGlmIChPYmplY3Qu aXNBcnJheSh0YWdOYW1lKSkgdGFnTmFtZS5lYWNoKGV4dGVuZCk7CiAgICBlbHNl IGV4dGVuZCh0YWdOYW1lKTsKICB9CgogIGZ1bmN0aW9uIGV4dGVuZCh0YWdOYW1l KSB7CiAgICB0YWdOYW1lID0gdGFnTmFtZS50b1VwcGVyQ2FzZSgpOwogICAgaWYg KCFFbGVtZW50Lk1ldGhvZHMuQnlUYWdbdGFnTmFtZV0pCiAgICAgIEVsZW1lbnQu TWV0aG9kcy5CeVRhZ1t0YWdOYW1lXSA9IHsgfTsKICAgIE9iamVjdC5leHRlbmQo RWxlbWVudC5NZXRob2RzLkJ5VGFnW3RhZ05hbWVdLCBtZXRob2RzKTsKICB9Cgog IGZ1bmN0aW9uIGNvcHkobWV0aG9kcywgZGVzdGluYXRpb24sIG9ubHlJZkFic2Vu dCkgewogICAgb25seUlmQWJzZW50ID0gb25seUlmQWJzZW50IHx8IGZhbHNlOwog ICAgZm9yICh2YXIgcHJvcGVydHkgaW4gbWV0aG9kcykgewogICAgICB2YXIgdmFs dWUgPSBtZXRob2RzW3Byb3BlcnR5XTsKICAgICAgaWYgKCFPYmplY3QuaXNGdW5j dGlvbih2YWx1ZSkpIGNvbnRpbnVlOwogICAgICBpZiAoIW9ubHlJZkFic2VudCB8 fCAhKHByb3BlcnR5IGluIGRlc3RpbmF0aW9uKSkKICAgICAgICBkZXN0aW5hdGlv bltwcm9wZXJ0eV0gPSB2YWx1ZS5tZXRob2RpemUoKTsKICAgIH0KICB9CgogIGZ1 bmN0aW9uIGZpbmRET01DbGFzcyh0YWdOYW1lKSB7CiAgICB2YXIga2xhc3M7CiAg ICB2YXIgdHJhbnMgPSB7CiAgICAgICJPUFRHUk9VUCI6ICJPcHRHcm91cCIsICJU RVhUQVJFQSI6ICJUZXh0QXJlYSIsICJQIjogIlBhcmFncmFwaCIsCiAgICAgICJG SUVMRFNFVCI6ICJGaWVsZFNldCIsICJVTCI6ICJVTGlzdCIsICJPTCI6ICJPTGlz dCIsICJETCI6ICJETGlzdCIsCiAgICAgICJESVIiOiAiRGlyZWN0b3J5IiwgIkgx IjogIkhlYWRpbmciLCAiSDIiOiAiSGVhZGluZyIsICJIMyI6ICJIZWFkaW5nIiwK ICAgICAgIkg0IjogIkhlYWRpbmciLCAiSDUiOiAiSGVhZGluZyIsICJINiI6ICJI ZWFkaW5nIiwgIlEiOiAiUXVvdGUiLAogICAgICAiSU5TIjogIk1vZCIsICJERUwi OiAiTW9kIiwgIkEiOiAiQW5jaG9yIiwgIklNRyI6ICJJbWFnZSIsICJDQVBUSU9O IjoKICAgICAgIlRhYmxlQ2FwdGlvbiIsICJDT0wiOiAiVGFibGVDb2wiLCAiQ09M R1JPVVAiOiAiVGFibGVDb2wiLCAiVEhFQUQiOgogICAgICAiVGFibGVTZWN0aW9u IiwgIlRGT09UIjogIlRhYmxlU2VjdGlvbiIsICJUQk9EWSI6ICJUYWJsZVNlY3Rp b24iLCAiVFIiOgogICAgICAiVGFibGVSb3ciLCAiVEgiOiAiVGFibGVDZWxsIiwg IlREIjogIlRhYmxlQ2VsbCIsICJGUkFNRVNFVCI6CiAgICAgICJGcmFtZVNldCIs ICJJRlJBTUUiOiAiSUZyYW1lIgogICAgfTsKICAgIGlmICh0cmFuc1t0YWdOYW1l XSkga2xhc3MgPSAnSFRNTCcgKyB0cmFuc1t0YWdOYW1lXSArICdFbGVtZW50JzsK ICAgIGlmICh3aW5kb3dba2xhc3NdKSByZXR1cm4gd2luZG93W2tsYXNzXTsKICAg IGtsYXNzID0gJ0hUTUwnICsgdGFnTmFtZSArICdFbGVtZW50JzsKICAgIGlmICh3 aW5kb3dba2xhc3NdKSByZXR1cm4gd2luZG93W2tsYXNzXTsKICAgIGtsYXNzID0g J0hUTUwnICsgdGFnTmFtZS5jYXBpdGFsaXplKCkgKyAnRWxlbWVudCc7CiAgICBp ZiAod2luZG93W2tsYXNzXSkgcmV0dXJuIHdpbmRvd1trbGFzc107CgogICAgd2lu ZG93W2tsYXNzXSA9IHsgfTsKICAgIHdpbmRvd1trbGFzc10ucHJvdG90eXBlID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKVsnX19wcm90b19fJ107CiAg ICByZXR1cm4gd2luZG93W2tsYXNzXTsKICB9CgogIGlmIChGLkVsZW1lbnRFeHRl bnNpb25zKSB7CiAgICBjb3B5KEVsZW1lbnQuTWV0aG9kcywgSFRNTEVsZW1lbnQu cHJvdG90eXBlKTsKICAgIGNvcHkoRWxlbWVudC5NZXRob2RzLlNpbXVsYXRlZCwg SFRNTEVsZW1lbnQucHJvdG90eXBlLCB0cnVlKTsKICB9CgogIGlmIChGLlNwZWNp ZmljRWxlbWVudEV4dGVuc2lvbnMpIHsKICAgIGZvciAodmFyIHRhZyBpbiBFbGVt ZW50Lk1ldGhvZHMuQnlUYWcpIHsKICAgICAgdmFyIGtsYXNzID0gZmluZERPTUNs YXNzKHRhZyk7CiAgICAgIGlmIChPYmplY3QuaXNVbmRlZmluZWQoa2xhc3MpKSBj b250aW51ZTsKICAgICAgY29weShUW3RhZ10sIGtsYXNzLnByb3RvdHlwZSk7CiAg ICB9CiAgfQoKICBPYmplY3QuZXh0ZW5kKEVsZW1lbnQsIEVsZW1lbnQuTWV0aG9k cyk7CiAgZGVsZXRlIEVsZW1lbnQuQnlUYWc7CgogIGlmIChFbGVtZW50LmV4dGVu ZC5yZWZyZXNoKSBFbGVtZW50LmV4dGVuZC5yZWZyZXNoKCk7CiAgRWxlbWVudC5j YWNoZSA9IHsgfTsKfTsKCmRvY3VtZW50LnZpZXdwb3J0ID0gewogIGdldERpbWVu c2lvbnM6IGZ1bmN0aW9uKCkgewogICAgdmFyIGRpbWVuc2lvbnMgPSB7IH0sIEIg PSBQcm90b3R5cGUuQnJvd3NlcjsKICAgICR3KCd3aWR0aCBoZWlnaHQnKS5lYWNo KGZ1bmN0aW9uKGQpIHsKICAgICAgdmFyIEQgPSBkLmNhcGl0YWxpemUoKTsKICAg ICAgaWYgKEIuV2ViS2l0ICYmICFkb2N1bWVudC5ldmFsdWF0ZSkgewogICAgICAg IC8vIFNhZmFyaSA8My4wIG5lZWRzIHNlbGYuaW5uZXJXaWR0aC9IZWlnaHQKICAg ICAgICBkaW1lbnNpb25zW2RdID0gc2VsZlsnaW5uZXInICsgRF07CiAgICAgIH0g ZWxzZSBpZiAoQi5PcGVyYSAmJiBwYXJzZUZsb2F0KHdpbmRvdy5vcGVyYS52ZXJz aW9uKCkpIDwgOS41KSB7CiAgICAgICAgLy8gT3BlcmEgPDkuNSBuZWVkcyBkb2N1 bWVudC5ib2R5LmNsaWVudFdpZHRoL0hlaWdodAogICAgICAgIGRpbWVuc2lvbnNb ZF0gPSBkb2N1bWVudC5ib2R5WydjbGllbnQnICsgRF0KICAgICAgfSBlbHNlIHsK ICAgICAgICBkaW1lbnNpb25zW2RdID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50 WydjbGllbnQnICsgRF07CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGRpbWVu c2lvbnM7CiAgfSwKCiAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJu IHRoaXMuZ2V0RGltZW5zaW9ucygpLndpZHRoOwogIH0sCgogIGdldEhlaWdodDog ZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5nZXREaW1lbnNpb25zKCkuaGVp Z2h0OwogIH0sCgogIGdldFNjcm9sbE9mZnNldHM6IGZ1bmN0aW9uKCkgewogICAg cmV0dXJuIEVsZW1lbnQuX3JldHVybk9mZnNldCgKICAgICAgd2luZG93LnBhZ2VY T2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IHx8 IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCwKICAgICAgd2luZG93LnBhZ2VZT2Zm c2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9j dW1lbnQuYm9keS5zY3JvbGxUb3ApOwogIH0KfTsKLyogUG9ydGlvbnMgb2YgdGhl IFNlbGVjdG9yIGNsYXNzIGFyZSBkZXJpdmVkIGZyb20gSmFjayBTbG9jdW0ncyBE b21RdWVyeSwKICogcGFydCBvZiBZVUktRXh0IHZlcnNpb24gMC40MCwgZGlzdHJp YnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGFuIE1JVC1zdHlsZQogKiBsaWNlbnNl LiAgUGxlYXNlIHNlZSBodHRwOi8vd3d3Lnl1aS1leHQuY29tLyBmb3IgbW9yZSBp bmZvcm1hdGlvbi4gKi8KCnZhciBTZWxlY3RvciA9IENsYXNzLmNyZWF0ZSh7CiAg aW5pdGlhbGl6ZTogZnVuY3Rpb24oZXhwcmVzc2lvbikgewogICAgdGhpcy5leHBy ZXNzaW9uID0gZXhwcmVzc2lvbi5zdHJpcCgpOwoKICAgIGlmICh0aGlzLnNob3Vs ZFVzZVNlbGVjdG9yc0FQSSgpKSB7CiAgICAgIHRoaXMubW9kZSA9ICdzZWxlY3Rv cnNBUEknOwogICAgfSBlbHNlIGlmICh0aGlzLnNob3VsZFVzZVhQYXRoKCkpIHsK ICAgICAgdGhpcy5tb2RlID0gJ3hwYXRoJzsKICAgICAgdGhpcy5jb21waWxlWFBh dGhNYXRjaGVyKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLm1vZGUgPSAibm9y bWFsIjsKICAgICAgdGhpcy5jb21waWxlTWF0Y2hlcigpOwogICAgfQoKICB9LAoK ICBzaG91bGRVc2VYUGF0aDogZnVuY3Rpb24oKSB7CiAgICBpZiAoIVByb3RvdHlw ZS5Ccm93c2VyRmVhdHVyZXMuWFBhdGgpIHJldHVybiBmYWxzZTsKCiAgICB2YXIg ZSA9IHRoaXMuZXhwcmVzc2lvbjsKCiAgICAvLyBTYWZhcmkgMyBjaG9rZXMgb24g Oiotb2YtdHlwZSBhbmQgOmVtcHR5CiAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIu V2ViS2l0ICYmCiAgICAgKGUuaW5jbHVkZSgiLW9mLXR5cGUiKSB8fCBlLmluY2x1 ZGUoIjplbXB0eSIpKSkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIC8vIFhQYXRo IGNhbid0IGRvIG5hbWVzcGFjZWQgYXR0cmlidXRlcywgbm9yIGNhbiBpdCByZWFk CiAgICAvLyB0aGUgImNoZWNrZWQiIHByb3BlcnR5IGZyb20gRE9NIG5vZGVzCiAg ICBpZiAoKC8oXFtbXHctXSo/Onw6Y2hlY2tlZCkvKS50ZXN0KGUpKQogICAgICBy ZXR1cm4gZmFsc2U7CgogICAgcmV0dXJuIHRydWU7CiAgfSwKCiAgc2hvdWxkVXNl U2VsZWN0b3JzQVBJOiBmdW5jdGlvbigpIHsKICAgIGlmICghUHJvdG90eXBlLkJy b3dzZXJGZWF0dXJlcy5TZWxlY3RvcnNBUEkpIHJldHVybiBmYWxzZTsKCiAgICBp ZiAoIVNlbGVjdG9yLl9kaXYpIFNlbGVjdG9yLl9kaXYgPSBuZXcgRWxlbWVudCgn ZGl2Jyk7CgogICAgLy8gTWFrZSBzdXJlIHRoZSBicm93c2VyIHRyZWF0cyB0aGUg c2VsZWN0b3IgYXMgdmFsaWQuIFRlc3Qgb24gYW4KICAgIC8vIGlzb2xhdGVkIGVs ZW1lbnQgdG8gbWluaW1pemUgY29zdCBvZiB0aGlzIGNoZWNrLgogICAgdHJ5IHsK ICAgICAgU2VsZWN0b3IuX2Rpdi5xdWVyeVNlbGVjdG9yKHRoaXMuZXhwcmVzc2lv bik7CiAgICB9IGNhdGNoKGUpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoK ICAgIHJldHVybiB0cnVlOwogIH0sCgogIGNvbXBpbGVNYXRjaGVyOiBmdW5jdGlv bigpIHsKICAgIHZhciBlID0gdGhpcy5leHByZXNzaW9uLCBwcyA9IFNlbGVjdG9y LnBhdHRlcm5zLCBoID0gU2VsZWN0b3IuaGFuZGxlcnMsCiAgICAgICAgYyA9IFNl bGVjdG9yLmNyaXRlcmlhLCBsZSwgcCwgbTsKCiAgICBpZiAoU2VsZWN0b3IuX2Nh Y2hlW2VdKSB7CiAgICAgIHRoaXMubWF0Y2hlciA9IFNlbGVjdG9yLl9jYWNoZVtl XTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHRoaXMubWF0Y2hlciA9IFsidGhp cy5tYXRjaGVyID0gZnVuY3Rpb24ocm9vdCkgeyIsCiAgICAgICAgICAgICAgICAg ICAgInZhciByID0gcm9vdCwgaCA9IFNlbGVjdG9yLmhhbmRsZXJzLCBjID0gZmFs c2UsIG47Il07CgogICAgd2hpbGUgKGUgJiYgbGUgIT0gZSAmJiAoL1xTLykudGVz dChlKSkgewogICAgICBsZSA9IGU7CiAgICAgIGZvciAodmFyIGkgaW4gcHMpIHsK ICAgICAgICBwID0gcHNbaV07CiAgICAgICAgaWYgKG0gPSBlLm1hdGNoKHApKSB7 CiAgICAgICAgICB0aGlzLm1hdGNoZXIucHVzaChPYmplY3QuaXNGdW5jdGlvbihj W2ldKSA/IGNbaV0obSkgOgogICAgICAgICAgICBuZXcgVGVtcGxhdGUoY1tpXSku ZXZhbHVhdGUobSkpOwogICAgICAgICAgZSA9IGUucmVwbGFjZShtWzBdLCAnJyk7 CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICB0 aGlzLm1hdGNoZXIucHVzaCgicmV0dXJuIGgudW5pcXVlKG4pO1xufSIpOwogICAg ZXZhbCh0aGlzLm1hdGNoZXIuam9pbignXG4nKSk7CiAgICBTZWxlY3Rvci5fY2Fj aGVbdGhpcy5leHByZXNzaW9uXSA9IHRoaXMubWF0Y2hlcjsKICB9LAoKICBjb21w aWxlWFBhdGhNYXRjaGVyOiBmdW5jdGlvbigpIHsKICAgIHZhciBlID0gdGhpcy5l eHByZXNzaW9uLCBwcyA9IFNlbGVjdG9yLnBhdHRlcm5zLAogICAgICAgIHggPSBT ZWxlY3Rvci54cGF0aCwgbGUsIG07CgogICAgaWYgKFNlbGVjdG9yLl9jYWNoZVtl XSkgewogICAgICB0aGlzLnhwYXRoID0gU2VsZWN0b3IuX2NhY2hlW2VdOyByZXR1 cm47CiAgICB9CgogICAgdGhpcy5tYXRjaGVyID0gWycuLy8qJ107CiAgICB3aGls ZSAoZSAmJiBsZSAhPSBlICYmICgvXFMvKS50ZXN0KGUpKSB7CiAgICAgIGxlID0g ZTsKICAgICAgZm9yICh2YXIgaSBpbiBwcykgewogICAgICAgIGlmIChtID0gZS5t YXRjaChwc1tpXSkpIHsKICAgICAgICAgIHRoaXMubWF0Y2hlci5wdXNoKE9iamVj dC5pc0Z1bmN0aW9uKHhbaV0pID8geFtpXShtKSA6CiAgICAgICAgICAgIG5ldyBU ZW1wbGF0ZSh4W2ldKS5ldmFsdWF0ZShtKSk7CiAgICAgICAgICBlID0gZS5yZXBs YWNlKG1bMF0sICcnKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAg fQogICAgfQoKICAgIHRoaXMueHBhdGggPSB0aGlzLm1hdGNoZXIuam9pbignJyk7 CiAgICBTZWxlY3Rvci5fY2FjaGVbdGhpcy5leHByZXNzaW9uXSA9IHRoaXMueHBh dGg7CiAgfSwKCiAgZmluZEVsZW1lbnRzOiBmdW5jdGlvbihyb290KSB7CiAgICBy b290ID0gcm9vdCB8fCBkb2N1bWVudDsKICAgIHZhciBlID0gdGhpcy5leHByZXNz aW9uLCByZXN1bHRzOwoKICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7CiAgICAgIGNh c2UgJ3NlbGVjdG9yc0FQSSc6CiAgICAgICAgLy8gcXVlcnlTZWxlY3RvckFsbCBx dWVyaWVzIGRvY3VtZW50LXdpZGUsIHRoZW4gZmlsdGVycyB0byBkZXNjZW5kYW50 cwogICAgICAgIC8vIG9mIHRoZSBjb250ZXh0IGVsZW1lbnQuIFRoYXQncyBub3Qg d2hhdCB3ZSB3YW50LgogICAgICAgIC8vIEFkZCBhbiBleHBsaWNpdCBjb250ZXh0 IHRvIHRoZSBzZWxlY3RvciBpZiBuZWNlc3NhcnkuCiAgICAgICAgaWYgKHJvb3Qg IT09IGRvY3VtZW50KSB7CiAgICAgICAgICB2YXIgb2xkSWQgPSByb290LmlkLCBp ZCA9ICQocm9vdCkuaWRlbnRpZnkoKTsKICAgICAgICAgIGUgPSAiIyIgKyBpZCAr ICIgIiArIGU7CiAgICAgICAgfQoKICAgICAgICByZXN1bHRzID0gJEEocm9vdC5x dWVyeVNlbGVjdG9yQWxsKGUpKS5tYXAoRWxlbWVudC5leHRlbmQpOwogICAgICAg IHJvb3QuaWQgPSBvbGRJZDsKCiAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAg IGNhc2UgJ3hwYXRoJzoKICAgICAgICByZXR1cm4gZG9jdW1lbnQuX2dldEVsZW1l bnRzQnlYUGF0aCh0aGlzLnhwYXRoLCByb290KTsKICAgICAgZGVmYXVsdDoKICAg ICAgIHJldHVybiB0aGlzLm1hdGNoZXIocm9vdCk7CiAgICB9CiAgfSwKCiAgbWF0 Y2g6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHRoaXMudG9rZW5zID0gW107Cgog ICAgdmFyIGUgPSB0aGlzLmV4cHJlc3Npb24sIHBzID0gU2VsZWN0b3IucGF0dGVy bnMsIGFzID0gU2VsZWN0b3IuYXNzZXJ0aW9uczsKICAgIHZhciBsZSwgcCwgbTsK CiAgICB3aGlsZSAoZSAmJiBsZSAhPT0gZSAmJiAoL1xTLykudGVzdChlKSkgewog ICAgICBsZSA9IGU7CiAgICAgIGZvciAodmFyIGkgaW4gcHMpIHsKICAgICAgICBw ID0gcHNbaV07CiAgICAgICAgaWYgKG0gPSBlLm1hdGNoKHApKSB7CiAgICAgICAg ICAvLyB1c2UgdGhlIFNlbGVjdG9yLmFzc2VydGlvbnMgbWV0aG9kcyB1bmxlc3Mg dGhlIHNlbGVjdG9yCiAgICAgICAgICAvLyBpcyB0b28gY29tcGxleC4KICAgICAg ICAgIGlmIChhc1tpXSkgewogICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKFtp LCBPYmplY3QuY2xvbmUobSldKTsKICAgICAgICAgICAgZSA9IGUucmVwbGFjZSht WzBdLCAnJyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyByZWx1 Y3RhbnRseSBkbyBhIGRvY3VtZW50LXdpZGUgc2VhcmNoCiAgICAgICAgICAgIC8v IGFuZCBsb29rIGZvciBhIG1hdGNoIGluIHRoZSBhcnJheQogICAgICAgICAgICBy ZXR1cm4gdGhpcy5maW5kRWxlbWVudHMoZG9jdW1lbnQpLmluY2x1ZGUoZWxlbWVu dCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdmFy IG1hdGNoID0gdHJ1ZSwgbmFtZSwgbWF0Y2hlczsKICAgIGZvciAodmFyIGkgPSAw LCB0b2tlbjsgdG9rZW4gPSB0aGlzLnRva2Vuc1tpXTsgaSsrKSB7CiAgICAgIG5h bWUgPSB0b2tlblswXSwgbWF0Y2hlcyA9IHRva2VuWzFdOwogICAgICBpZiAoIVNl bGVjdG9yLmFzc2VydGlvbnNbbmFtZV0oZWxlbWVudCwgbWF0Y2hlcykpIHsKICAg ICAgICBtYXRjaCA9IGZhbHNlOyBicmVhazsKICAgICAgfQogICAgfQoKICAgIHJl dHVybiBtYXRjaDsKICB9LAoKICB0b1N0cmluZzogZnVuY3Rpb24oKSB7CiAgICBy ZXR1cm4gdGhpcy5leHByZXNzaW9uOwogIH0sCgogIGluc3BlY3Q6IGZ1bmN0aW9u KCkgewogICAgcmV0dXJuICIjPFNlbGVjdG9yOiIgKyB0aGlzLmV4cHJlc3Npb24u aW5zcGVjdCgpICsgIj4iOwogIH0KfSk7CgpPYmplY3QuZXh0ZW5kKFNlbGVjdG9y LCB7CiAgX2NhY2hlOiB7IH0sCgogIHhwYXRoOiB7CiAgICBkZXNjZW5kYW50OiAg ICIvLyoiLAogICAgY2hpbGQ6ICAgICAgICAiLyoiLAogICAgYWRqYWNlbnQ6ICAg ICAiL2ZvbGxvd2luZy1zaWJsaW5nOjoqWzFdIiwKICAgIGxhdGVyU2libGluZzog Jy9mb2xsb3dpbmctc2libGluZzo6KicsCiAgICB0YWdOYW1lOiAgICAgIGZ1bmN0 aW9uKG0pIHsKICAgICAgaWYgKG1bMV0gPT0gJyonKSByZXR1cm4gJyc7CiAgICAg IHJldHVybiAiW2xvY2FsLW5hbWUoKT0nIiArIG1bMV0udG9Mb3dlckNhc2UoKSAr CiAgICAgICAgICAgICAiJyBvciBsb2NhbC1uYW1lKCk9JyIgKyBtWzFdLnRvVXBw ZXJDYXNlKCkgKyAiJ10iOwogICAgfSwKICAgIGNsYXNzTmFtZTogICAgIltjb250 YWlucyhjb25jYXQoJyAnLCBAY2xhc3MsICcgJyksICcgI3sxfSAnKV0iLAogICAg aWQ6ICAgICAgICAgICAiW0BpZD0nI3sxfSddIiwKICAgIGF0dHJQcmVzZW5jZTog ZnVuY3Rpb24obSkgewogICAgICBtWzFdID0gbVsxXS50b0xvd2VyQ2FzZSgpOwog ICAgICByZXR1cm4gbmV3IFRlbXBsYXRlKCJbQCN7MX1dIikuZXZhbHVhdGUobSk7 CiAgICB9LAogICAgYXR0cjogZnVuY3Rpb24obSkgewogICAgICBtWzFdID0gbVsx XS50b0xvd2VyQ2FzZSgpOwogICAgICBtWzNdID0gbVs1XSB8fCBtWzZdOwogICAg ICByZXR1cm4gbmV3IFRlbXBsYXRlKFNlbGVjdG9yLnhwYXRoLm9wZXJhdG9yc1tt WzJdXSkuZXZhbHVhdGUobSk7CiAgICB9LAogICAgcHNldWRvOiBmdW5jdGlvbiht KSB7CiAgICAgIHZhciBoID0gU2VsZWN0b3IueHBhdGgucHNldWRvc1ttWzFdXTsK ICAgICAgaWYgKCFoKSByZXR1cm4gJyc7CiAgICAgIGlmIChPYmplY3QuaXNGdW5j dGlvbihoKSkgcmV0dXJuIGgobSk7CiAgICAgIHJldHVybiBuZXcgVGVtcGxhdGUo U2VsZWN0b3IueHBhdGgucHNldWRvc1ttWzFdXSkuZXZhbHVhdGUobSk7CiAgICB9 LAogICAgb3BlcmF0b3JzOiB7CiAgICAgICc9JzogICJbQCN7MX09JyN7M30nXSIs CiAgICAgICchPSc6ICJbQCN7MX0hPScjezN9J10iLAogICAgICAnXj0nOiAiW3N0 YXJ0cy13aXRoKEAjezF9LCAnI3szfScpXSIsCiAgICAgICckPSc6ICJbc3Vic3Ry aW5nKEAjezF9LCAoc3RyaW5nLWxlbmd0aChAI3sxfSkgLSBzdHJpbmctbGVuZ3Ro KCcjezN9JykgKyAxKSk9JyN7M30nXSIsCiAgICAgICcqPSc6ICJbY29udGFpbnMo QCN7MX0sICcjezN9JyldIiwKICAgICAgJ349JzogIltjb250YWlucyhjb25jYXQo JyAnLCBAI3sxfSwgJyAnKSwgJyAjezN9ICcpXSIsCiAgICAgICd8PSc6ICJbY29u dGFpbnMoY29uY2F0KCctJywgQCN7MX0sICctJyksICctI3szfS0nKV0iCiAgICB9 LAogICAgcHNldWRvczogewogICAgICAnZmlyc3QtY2hpbGQnOiAnW25vdChwcmVj ZWRpbmctc2libGluZzo6KildJywKICAgICAgJ2xhc3QtY2hpbGQnOiAgJ1tub3Qo Zm9sbG93aW5nLXNpYmxpbmc6OiopXScsCiAgICAgICdvbmx5LWNoaWxkJzogICdb bm90KHByZWNlZGluZy1zaWJsaW5nOjoqIG9yIGZvbGxvd2luZy1zaWJsaW5nOjoq KV0nLAogICAgICAnZW1wdHknOiAgICAgICAiW2NvdW50KCopID0gMCBhbmQgKGNv dW50KHRleHQoKSkgPSAwKV0iLAogICAgICAnY2hlY2tlZCc6ICAgICAiW0BjaGVj a2VkXSIsCiAgICAgICdkaXNhYmxlZCc6ICAgICJbKEBkaXNhYmxlZCkgYW5kIChA dHlwZSE9J2hpZGRlbicpXSIsCiAgICAgICdlbmFibGVkJzogICAgICJbbm90KEBk aXNhYmxlZCkgYW5kIChAdHlwZSE9J2hpZGRlbicpXSIsCiAgICAgICdub3QnOiBm dW5jdGlvbihtKSB7CiAgICAgICAgdmFyIGUgPSBtWzZdLCBwID0gU2VsZWN0b3Iu cGF0dGVybnMsCiAgICAgICAgICAgIHggPSBTZWxlY3Rvci54cGF0aCwgbGUsIHY7 CgogICAgICAgIHZhciBleGNsdXNpb24gPSBbXTsKICAgICAgICB3aGlsZSAoZSAm JiBsZSAhPSBlICYmICgvXFMvKS50ZXN0KGUpKSB7CiAgICAgICAgICBsZSA9IGU7 CiAgICAgICAgICBmb3IgKHZhciBpIGluIHApIHsKICAgICAgICAgICAgaWYgKG0g PSBlLm1hdGNoKHBbaV0pKSB7CiAgICAgICAgICAgICAgdiA9IE9iamVjdC5pc0Z1 bmN0aW9uKHhbaV0pID8geFtpXShtKSA6IG5ldyBUZW1wbGF0ZSh4W2ldKS5ldmFs dWF0ZShtKTsKICAgICAgICAgICAgICBleGNsdXNpb24ucHVzaCgiKCIgKyB2LnN1 YnN0cmluZygxLCB2Lmxlbmd0aCAtIDEpICsgIikiKTsKICAgICAgICAgICAgICBl ID0gZS5yZXBsYWNlKG1bMF0sICcnKTsKICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4g Iltub3QoIiArIGV4Y2x1c2lvbi5qb2luKCIgYW5kICIpICsgIildIjsKICAgICAg fSwKICAgICAgJ250aC1jaGlsZCc6ICAgICAgZnVuY3Rpb24obSkgewogICAgICAg IHJldHVybiBTZWxlY3Rvci54cGF0aC5wc2V1ZG9zLm50aCgiKGNvdW50KC4vcHJl Y2VkaW5nLXNpYmxpbmc6OiopICsgMSkgIiwgbSk7CiAgICAgIH0sCiAgICAgICdu dGgtbGFzdC1jaGlsZCc6IGZ1bmN0aW9uKG0pIHsKICAgICAgICByZXR1cm4gU2Vs ZWN0b3IueHBhdGgucHNldWRvcy5udGgoIihjb3VudCguL2ZvbGxvd2luZy1zaWJs aW5nOjoqKSArIDEpICIsIG0pOwogICAgICB9LAogICAgICAnbnRoLW9mLXR5cGUn OiAgICBmdW5jdGlvbihtKSB7CiAgICAgICAgcmV0dXJuIFNlbGVjdG9yLnhwYXRo LnBzZXVkb3MubnRoKCJwb3NpdGlvbigpICIsIG0pOwogICAgICB9LAogICAgICAn bnRoLWxhc3Qtb2YtdHlwZSc6IGZ1bmN0aW9uKG0pIHsKICAgICAgICByZXR1cm4g U2VsZWN0b3IueHBhdGgucHNldWRvcy5udGgoIihsYXN0KCkgKyAxIC0gcG9zaXRp b24oKSkgIiwgbSk7CiAgICAgIH0sCiAgICAgICdmaXJzdC1vZi10eXBlJzogIGZ1 bmN0aW9uKG0pIHsKICAgICAgICBtWzZdID0gIjEiOyByZXR1cm4gU2VsZWN0b3Iu eHBhdGgucHNldWRvc1snbnRoLW9mLXR5cGUnXShtKTsKICAgICAgfSwKICAgICAg J2xhc3Qtb2YtdHlwZSc6ICAgZnVuY3Rpb24obSkgewogICAgICAgIG1bNl0gPSAi MSI7IHJldHVybiBTZWxlY3Rvci54cGF0aC5wc2V1ZG9zWydudGgtbGFzdC1vZi10 eXBlJ10obSk7CiAgICAgIH0sCiAgICAgICdvbmx5LW9mLXR5cGUnOiAgIGZ1bmN0 aW9uKG0pIHsKICAgICAgICB2YXIgcCA9IFNlbGVjdG9yLnhwYXRoLnBzZXVkb3M7 IHJldHVybiBwWydmaXJzdC1vZi10eXBlJ10obSkgKyBwWydsYXN0LW9mLXR5cGUn XShtKTsKICAgICAgfSwKICAgICAgbnRoOiBmdW5jdGlvbihmcmFnbWVudCwgbSkg ewogICAgICAgIHZhciBtbSwgZm9ybXVsYSA9IG1bNl0sIHByZWRpY2F0ZTsKICAg ICAgICBpZiAoZm9ybXVsYSA9PSAnZXZlbicpIGZvcm11bGEgPSAnMm4rMCc7CiAg ICAgICAgaWYgKGZvcm11bGEgPT0gJ29kZCcpICBmb3JtdWxhID0gJzJuKzEnOwog ICAgICAgIGlmIChtbSA9IGZvcm11bGEubWF0Y2goL14oXGQrKSQvKSkgLy8gZGln aXQgb25seQogICAgICAgICAgcmV0dXJuICdbJyArIGZyYWdtZW50ICsgIj0gIiAr IG1tWzFdICsgJ10nOwogICAgICAgIGlmIChtbSA9IGZvcm11bGEubWF0Y2goL14o LT9cZCopP24oKFsrLV0pKFxkKykpPy8pKSB7IC8vIGFuK2IKICAgICAgICAgIGlm IChtbVsxXSA9PSAiLSIpIG1tWzFdID0gLTE7CiAgICAgICAgICB2YXIgYSA9IG1t WzFdID8gTnVtYmVyKG1tWzFdKSA6IDE7CiAgICAgICAgICB2YXIgYiA9IG1tWzJd ID8gTnVtYmVyKG1tWzJdKSA6IDA7CiAgICAgICAgICBwcmVkaWNhdGUgPSAiWygo I3tmcmFnbWVudH0gLSAje2J9KSBtb2QgI3thfSA9IDApIGFuZCAiICsKICAgICAg ICAgICIoKCN7ZnJhZ21lbnR9IC0gI3tifSkgZGl2ICN7YX0gPj0gMCldIjsKICAg ICAgICAgIHJldHVybiBuZXcgVGVtcGxhdGUocHJlZGljYXRlKS5ldmFsdWF0ZSh7 CiAgICAgICAgICAgIGZyYWdtZW50OiBmcmFnbWVudCwgYTogYSwgYjogYiB9KTsK ICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LAoKICBjcml0ZXJpYTogewogICAg dGFnTmFtZTogICAgICAnbiA9IGgudGFnTmFtZShuLCByLCAiI3sxfSIsIGMpOyAg ICAgIGMgPSBmYWxzZTsnLAogICAgY2xhc3NOYW1lOiAgICAnbiA9IGguY2xhc3NO YW1lKG4sIHIsICIjezF9IiwgYyk7ICAgIGMgPSBmYWxzZTsnLAogICAgaWQ6ICAg ICAgICAgICAnbiA9IGguaWQobiwgciwgIiN7MX0iLCBjKTsgICAgICAgICAgIGMg PSBmYWxzZTsnLAogICAgYXR0clByZXNlbmNlOiAnbiA9IGguYXR0clByZXNlbmNl KG4sIHIsICIjezF9IiwgYyk7IGMgPSBmYWxzZTsnLAogICAgYXR0cjogZnVuY3Rp b24obSkgewogICAgICBtWzNdID0gKG1bNV0gfHwgbVs2XSk7CiAgICAgIHJldHVy biBuZXcgVGVtcGxhdGUoJ24gPSBoLmF0dHIobiwgciwgIiN7MX0iLCAiI3szfSIs ICIjezJ9IiwgYyk7IGMgPSBmYWxzZTsnKS5ldmFsdWF0ZShtKTsKICAgIH0sCiAg ICBwc2V1ZG86IGZ1bmN0aW9uKG0pIHsKICAgICAgaWYgKG1bNl0pIG1bNl0gPSBt WzZdLnJlcGxhY2UoLyIvZywgJ1xcIicpOwogICAgICByZXR1cm4gbmV3IFRlbXBs YXRlKCduID0gaC5wc2V1ZG8obiwgIiN7MX0iLCAiI3s2fSIsIHIsIGMpOyBjID0g ZmFsc2U7JykuZXZhbHVhdGUobSk7CiAgICB9LAogICAgZGVzY2VuZGFudDogICAn YyA9ICJkZXNjZW5kYW50IjsnLAogICAgY2hpbGQ6ICAgICAgICAnYyA9ICJjaGls ZCI7JywKICAgIGFkamFjZW50OiAgICAgJ2MgPSAiYWRqYWNlbnQiOycsCiAgICBs YXRlclNpYmxpbmc6ICdjID0gImxhdGVyU2libGluZyI7JwogIH0sCgogIHBhdHRl cm5zOiB7CiAgICAvLyBjb21iaW5hdG9ycyBtdXN0IGJlIGxpc3RlZCBmaXJzdAog ICAgLy8gKGFuZCBkZXNjZW5kYW50IG5lZWRzIHRvIGJlIGxhc3QgY29tYmluYXRv cikKICAgIGxhdGVyU2libGluZzogL15ccyp+XHMqLywKICAgIGNoaWxkOiAgICAg ICAgL15ccyo+XHMqLywKICAgIGFkamFjZW50OiAgICAgL15ccypcK1xzKi8sCiAg ICBkZXNjZW5kYW50OiAgIC9eXHMvLAoKICAgIC8vIHNlbGVjdG9ycyBmb2xsb3cK ICAgIHRhZ05hbWU6ICAgICAgL15ccyooXCp8W1x3XC1dKykoXGJ8JCk/LywKICAg IGlkOiAgICAgICAgICAgL14jKFtcd1wtXCpdKykoXGJ8JCkvLAogICAgY2xhc3NO YW1lOiAgICAvXlwuKFtcd1wtXCpdKykoXGJ8JCkvLAogICAgcHNldWRvOgovXjoo KGZpcnN0fGxhc3R8bnRofG50aC1sYXN0fG9ubHkpKC1jaGlsZHwtb2YtdHlwZSl8 ZW1wdHl8Y2hlY2tlZHwoZW58ZGlzKWFibGVkfG5vdCkoXCgoLio/KVwpKT8oXGJ8 JHwoPz1cc3xbOit+Pl0pKS8sCiAgICBhdHRyUHJlc2VuY2U6IC9eXFsoKD86W1x3 XSs6KT9bXHddKylcXS8sCiAgICBhdHRyOiAgICAgICAgIC9cWygoPzpbXHctXSo6 KT9bXHctXSspXHMqKD86KFshXiQqfnxdPz0pXHMqKChbJyJdKShbXlw0XSo/KVw0 fChbXiciXVteXF1dKj8pKSk/XF0vCiAgfSwKCiAgLy8gZm9yIFNlbGVjdG9yLm1h dGNoIGFuZCBFbGVtZW50I21hdGNoCiAgYXNzZXJ0aW9uczogewogICAgdGFnTmFt ZTogZnVuY3Rpb24oZWxlbWVudCwgbWF0Y2hlcykgewogICAgICByZXR1cm4gbWF0 Y2hlc1sxXS50b1VwcGVyQ2FzZSgpID09IGVsZW1lbnQudGFnTmFtZS50b1VwcGVy Q2FzZSgpOwogICAgfSwKCiAgICBjbGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQs IG1hdGNoZXMpIHsKICAgICAgcmV0dXJuIEVsZW1lbnQuaGFzQ2xhc3NOYW1lKGVs ZW1lbnQsIG1hdGNoZXNbMV0pOwogICAgfSwKCiAgICBpZDogZnVuY3Rpb24oZWxl bWVudCwgbWF0Y2hlcykgewogICAgICByZXR1cm4gZWxlbWVudC5pZCA9PT0gbWF0 Y2hlc1sxXTsKICAgIH0sCgogICAgYXR0clByZXNlbmNlOiBmdW5jdGlvbihlbGVt ZW50LCBtYXRjaGVzKSB7CiAgICAgIHJldHVybiBFbGVtZW50Lmhhc0F0dHJpYnV0 ZShlbGVtZW50LCBtYXRjaGVzWzFdKTsKICAgIH0sCgogICAgYXR0cjogZnVuY3Rp b24oZWxlbWVudCwgbWF0Y2hlcykgewogICAgICB2YXIgbm9kZVZhbHVlID0gRWxl bWVudC5yZWFkQXR0cmlidXRlKGVsZW1lbnQsIG1hdGNoZXNbMV0pOwogICAgICBy ZXR1cm4gbm9kZVZhbHVlICYmIFNlbGVjdG9yLm9wZXJhdG9yc1ttYXRjaGVzWzJd XShub2RlVmFsdWUsIG1hdGNoZXNbNV0gfHwgbWF0Y2hlc1s2XSk7CiAgICB9CiAg fSwKCiAgaGFuZGxlcnM6IHsKICAgIC8vIFVUSUxJVFkgRlVOQ1RJT05TCiAgICAv LyBqb2lucyB0d28gY29sbGVjdGlvbnMKICAgIGNvbmNhdDogZnVuY3Rpb24oYSwg YikgewogICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IGJbaV07IGkr KykKICAgICAgICBhLnB1c2gobm9kZSk7CiAgICAgIHJldHVybiBhOwogICAgfSwK CiAgICAvLyBtYXJrcyBhbiBhcnJheSBvZiBub2RlcyBmb3IgY291bnRpbmcKICAg IG1hcms6IGZ1bmN0aW9uKG5vZGVzKSB7CiAgICAgIHZhciBfdHJ1ZSA9IFByb3Rv dHlwZS5lbXB0eUZ1bmN0aW9uOwogICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsg bm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgbm9kZS5fY291bnRlZEJ5UHJv dG90eXBlID0gX3RydWU7CiAgICAgIHJldHVybiBub2RlczsKICAgIH0sCgogICAg dW5tYXJrOiBmdW5jdGlvbihub2RlcykgewogICAgICBmb3IgKHZhciBpID0gMCwg bm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgbm9kZS5fY291bnRl ZEJ5UHJvdG90eXBlID0gdW5kZWZpbmVkOwogICAgICByZXR1cm4gbm9kZXM7CiAg ICB9LAoKICAgIC8vIG1hcmsgZWFjaCBjaGlsZCBub2RlIHdpdGggaXRzIHBvc2l0 aW9uIChmb3IgbnRoIGNhbGxzKQogICAgLy8gIm9mVHlwZSIgZmxhZyBpbmRpY2F0 ZXMgd2hldGhlciB3ZSdyZSBpbmRleGluZyBmb3IgbnRoLW9mLXR5cGUKICAgIC8v IHJhdGhlciB0aGFuIG50aC1jaGlsZAogICAgaW5kZXg6IGZ1bmN0aW9uKHBhcmVu dE5vZGUsIHJldmVyc2UsIG9mVHlwZSkgewogICAgICBwYXJlbnROb2RlLl9jb3Vu dGVkQnlQcm90b3R5cGUgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKICAgICAg aWYgKHJldmVyc2UpIHsKICAgICAgICBmb3IgKHZhciBub2RlcyA9IHBhcmVudE5v ZGUuY2hpbGROb2RlcywgaSA9IG5vZGVzLmxlbmd0aCAtIDEsIGogPSAxOyBpID49 IDA7IGktLSkgewogICAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTsKICAgICAg ICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEgJiYgKCFvZlR5cGUgfHwgbm9kZS5f Y291bnRlZEJ5UHJvdG90eXBlKSkgbm9kZS5ub2RlSW5kZXggPSBqKys7CiAgICAg ICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0g MSwgbm9kZXMgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXM7IG5vZGUgPSBub2Rlc1tp XTsgaSsrKQogICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSAmJiAoIW9m VHlwZSB8fCBub2RlLl9jb3VudGVkQnlQcm90b3R5cGUpKSBub2RlLm5vZGVJbmRl eCA9IGorKzsKICAgICAgfQogICAgfSwKCiAgICAvLyBmaWx0ZXJzIG91dCBkdXBs aWNhdGVzIGFuZCBleHRlbmRzIGFsbCBub2RlcwogICAgdW5pcXVlOiBmdW5jdGlv bihub2RlcykgewogICAgICBpZiAobm9kZXMubGVuZ3RoID09IDApIHJldHVybiBu b2RlczsKICAgICAgdmFyIHJlc3VsdHMgPSBbXSwgbjsKICAgICAgZm9yICh2YXIg aSA9IDAsIGwgPSBub2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspCiAgICAgICAgaWYg KCEobiA9IG5vZGVzW2ldKS5fY291bnRlZEJ5UHJvdG90eXBlKSB7CiAgICAgICAg ICBuLl9jb3VudGVkQnlQcm90b3R5cGUgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlv bjsKICAgICAgICAgIHJlc3VsdHMucHVzaChFbGVtZW50LmV4dGVuZChuKSk7CiAg ICAgICAgfQogICAgICByZXR1cm4gU2VsZWN0b3IuaGFuZGxlcnMudW5tYXJrKHJl c3VsdHMpOwogICAgfSwKCiAgICAvLyBDT01CSU5BVE9SIEZVTkNUSU9OUwogICAg ZGVzY2VuZGFudDogZnVuY3Rpb24obm9kZXMpIHsKICAgICAgdmFyIGggPSBTZWxl Y3Rvci5oYW5kbGVyczsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBb XSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgaC5jb25jYXQo cmVzdWx0cywgbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKTsKICAgICAg cmV0dXJuIHJlc3VsdHM7CiAgICB9LAoKICAgIGNoaWxkOiBmdW5jdGlvbihub2Rl cykgewogICAgICB2YXIgaCA9IFNlbGVjdG9yLmhhbmRsZXJzOwogICAgICBmb3Ig KHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07 IGkrKykgewogICAgICAgIGZvciAodmFyIGogPSAwLCBjaGlsZDsgY2hpbGQgPSBu b2RlLmNoaWxkTm9kZXNbal07IGorKykKICAgICAgICAgIGlmIChjaGlsZC5ub2Rl VHlwZSA9PSAxICYmIGNoaWxkLnRhZ05hbWUgIT0gJyEnKSByZXN1bHRzLnB1c2go Y2hpbGQpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHRzOwogICAgfSwKCiAg ICBhZGphY2VudDogZnVuY3Rpb24obm9kZXMpIHsKICAgICAgZm9yICh2YXIgaSA9 IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsK ICAgICAgICB2YXIgbmV4dCA9IHRoaXMubmV4dEVsZW1lbnRTaWJsaW5nKG5vZGUp OwogICAgICAgIGlmIChuZXh0KSByZXN1bHRzLnB1c2gobmV4dCk7CiAgICAgIH0K ICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9LAoKICAgIGxhdGVyU2libGluZzog ZnVuY3Rpb24obm9kZXMpIHsKICAgICAgdmFyIGggPSBTZWxlY3Rvci5oYW5kbGVy czsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9k ZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgaC5jb25jYXQocmVzdWx0cywgRWxl bWVudC5uZXh0U2libGluZ3Mobm9kZSkpOwogICAgICByZXR1cm4gcmVzdWx0czsK ICAgIH0sCgogICAgbmV4dEVsZW1lbnRTaWJsaW5nOiBmdW5jdGlvbihub2RlKSB7 CiAgICAgIHdoaWxlIChub2RlID0gbm9kZS5uZXh0U2libGluZykKICAgICAgICBp ZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gbm9kZTsKICAgICAgcmV0dXJu IG51bGw7CiAgICB9LAoKICAgIHByZXZpb3VzRWxlbWVudFNpYmxpbmc6IGZ1bmN0 aW9uKG5vZGUpIHsKICAgICAgd2hpbGUgKG5vZGUgPSBub2RlLnByZXZpb3VzU2li bGluZykKICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gbm9k ZTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9LAoKICAgIC8vIFRPS0VOIEZVTkNU SU9OUwogICAgdGFnTmFtZTogZnVuY3Rpb24obm9kZXMsIHJvb3QsIHRhZ05hbWUs IGNvbWJpbmF0b3IpIHsKICAgICAgdmFyIHVUYWdOYW1lID0gdGFnTmFtZS50b1Vw cGVyQ2FzZSgpOwogICAgICB2YXIgcmVzdWx0cyA9IFtdLCBoID0gU2VsZWN0b3Iu aGFuZGxlcnM7CiAgICAgIGlmIChub2RlcykgewogICAgICAgIGlmIChjb21iaW5h dG9yKSB7CiAgICAgICAgICAvLyBmYXN0bGFuZSBmb3Igb3JkaW5hcnkgZGVzY2Vu ZGFudCBjb21iaW5hdG9ycwogICAgICAgICAgaWYgKGNvbWJpbmF0b3IgPT0gImRl c2NlbmRhbnQiKSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBu b2RlID0gbm9kZXNbaV07IGkrKykKICAgICAgICAgICAgICBoLmNvbmNhdChyZXN1 bHRzLCBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpKTsKICAgICAg ICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgICAgICB9IGVsc2Ugbm9kZXMgPSB0 aGlzW2NvbWJpbmF0b3JdKG5vZGVzKTsKICAgICAgICAgIGlmICh0YWdOYW1lID09 ICIqIikgcmV0dXJuIG5vZGVzOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBp ID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgICBpZiAo bm9kZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09IHVUYWdOYW1lKSByZXN1bHRz LnB1c2gobm9kZSk7CiAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgIH0gZWxz ZSByZXR1cm4gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKTsKICAg IH0sCgogICAgaWQ6IGZ1bmN0aW9uKG5vZGVzLCByb290LCBpZCwgY29tYmluYXRv cikgewogICAgICB2YXIgdGFyZ2V0Tm9kZSA9ICQoaWQpLCBoID0gU2VsZWN0b3Iu aGFuZGxlcnM7CiAgICAgIGlmICghdGFyZ2V0Tm9kZSkgcmV0dXJuIFtdOwogICAg ICBpZiAoIW5vZGVzICYmIHJvb3QgPT0gZG9jdW1lbnQpIHJldHVybiBbdGFyZ2V0 Tm9kZV07CiAgICAgIGlmIChub2RlcykgewogICAgICAgIGlmIChjb21iaW5hdG9y KSB7CiAgICAgICAgICBpZiAoY29tYmluYXRvciA9PSAnY2hpbGQnKSB7CiAgICAg ICAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkr KykKICAgICAgICAgICAgICBpZiAodGFyZ2V0Tm9kZS5wYXJlbnROb2RlID09IG5v ZGUpIHJldHVybiBbdGFyZ2V0Tm9kZV07CiAgICAgICAgICB9IGVsc2UgaWYgKGNv bWJpbmF0b3IgPT0gJ2Rlc2NlbmRhbnQnKSB7CiAgICAgICAgICAgIGZvciAodmFy IGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKICAgICAgICAgICAg ICBpZiAoRWxlbWVudC5kZXNjZW5kYW50T2YodGFyZ2V0Tm9kZSwgbm9kZSkpIHJl dHVybiBbdGFyZ2V0Tm9kZV07CiAgICAgICAgICB9IGVsc2UgaWYgKGNvbWJpbmF0 b3IgPT0gJ2FkamFjZW50JykgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwg bm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgICAgICAgaWYgKFNl bGVjdG9yLmhhbmRsZXJzLnByZXZpb3VzRWxlbWVudFNpYmxpbmcodGFyZ2V0Tm9k ZSkgPT0gbm9kZSkKICAgICAgICAgICAgICAgIHJldHVybiBbdGFyZ2V0Tm9kZV07 CiAgICAgICAgICB9IGVsc2Ugbm9kZXMgPSBoW2NvbWJpbmF0b3JdKG5vZGVzKTsK ICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBu b2Rlc1tpXTsgaSsrKQogICAgICAgICAgaWYgKG5vZGUgPT0gdGFyZ2V0Tm9kZSkg cmV0dXJuIFt0YXJnZXROb2RlXTsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0K ICAgICAgcmV0dXJuICh0YXJnZXROb2RlICYmIEVsZW1lbnQuZGVzY2VuZGFudE9m KHRhcmdldE5vZGUsIHJvb3QpKSA/IFt0YXJnZXROb2RlXSA6IFtdOwogICAgfSwK CiAgICBjbGFzc05hbWU6IGZ1bmN0aW9uKG5vZGVzLCByb290LCBjbGFzc05hbWUs IGNvbWJpbmF0b3IpIHsKICAgICAgaWYgKG5vZGVzICYmIGNvbWJpbmF0b3IpIG5v ZGVzID0gdGhpc1tjb21iaW5hdG9yXShub2Rlcyk7CiAgICAgIHJldHVybiBTZWxl Y3Rvci5oYW5kbGVycy5ieUNsYXNzTmFtZShub2Rlcywgcm9vdCwgY2xhc3NOYW1l KTsKICAgIH0sCgogICAgYnlDbGFzc05hbWU6IGZ1bmN0aW9uKG5vZGVzLCByb290 LCBjbGFzc05hbWUpIHsKICAgICAgaWYgKCFub2Rlcykgbm9kZXMgPSBTZWxlY3Rv ci5oYW5kbGVycy5kZXNjZW5kYW50KFtyb290XSk7CiAgICAgIHZhciBuZWVkbGUg PSAnICcgKyBjbGFzc05hbWUgKyAnICc7CiAgICAgIGZvciAodmFyIGkgPSAwLCBy ZXN1bHRzID0gW10sIG5vZGUsIG5vZGVDbGFzc05hbWU7IG5vZGUgPSBub2Rlc1tp XTsgaSsrKSB7CiAgICAgICAgbm9kZUNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1l OwogICAgICAgIGlmIChub2RlQ2xhc3NOYW1lLmxlbmd0aCA9PSAwKSBjb250aW51 ZTsKICAgICAgICBpZiAobm9kZUNsYXNzTmFtZSA9PSBjbGFzc05hbWUgfHwgKCcg JyArIG5vZGVDbGFzc05hbWUgKyAnICcpLmluY2x1ZGUobmVlZGxlKSkKICAgICAg ICAgIHJlc3VsdHMucHVzaChub2RlKTsKICAgICAgfQogICAgICByZXR1cm4gcmVz dWx0czsKICAgIH0sCgogICAgYXR0clByZXNlbmNlOiBmdW5jdGlvbihub2Rlcywg cm9vdCwgYXR0ciwgY29tYmluYXRvcikgewogICAgICBpZiAoIW5vZGVzKSBub2Rl cyA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKICAgICAgaWYgKG5v ZGVzICYmIGNvbWJpbmF0b3IpIG5vZGVzID0gdGhpc1tjb21iaW5hdG9yXShub2Rl cyk7CiAgICAgIHZhciByZXN1bHRzID0gW107CiAgICAgIGZvciAodmFyIGkgPSAw LCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKICAgICAgICBpZiAoRWxlbWVu dC5oYXNBdHRyaWJ1dGUobm9kZSwgYXR0cikpIHJlc3VsdHMucHVzaChub2RlKTsK ICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9LAoKICAgIGF0dHI6IGZ1bmN0aW9u KG5vZGVzLCByb290LCBhdHRyLCB2YWx1ZSwgb3BlcmF0b3IsIGNvbWJpbmF0b3Ip IHsKICAgICAgaWYgKCFub2Rlcykgbm9kZXMgPSByb290LmdldEVsZW1lbnRzQnlU YWdOYW1lKCIqIik7CiAgICAgIGlmIChub2RlcyAmJiBjb21iaW5hdG9yKSBub2Rl cyA9IHRoaXNbY29tYmluYXRvcl0obm9kZXMpOwogICAgICB2YXIgaGFuZGxlciA9 IFNlbGVjdG9yLm9wZXJhdG9yc1tvcGVyYXRvcl0sIHJlc3VsdHMgPSBbXTsKICAg ICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKSB7 CiAgICAgICAgdmFyIG5vZGVWYWx1ZSA9IEVsZW1lbnQucmVhZEF0dHJpYnV0ZShu b2RlLCBhdHRyKTsKICAgICAgICBpZiAobm9kZVZhbHVlID09PSBudWxsKSBjb250 aW51ZTsKICAgICAgICBpZiAoaGFuZGxlcihub2RlVmFsdWUsIHZhbHVlKSkgcmVz dWx0cy5wdXNoKG5vZGUpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHRzOwog ICAgfSwKCiAgICBwc2V1ZG86IGZ1bmN0aW9uKG5vZGVzLCBuYW1lLCB2YWx1ZSwg cm9vdCwgY29tYmluYXRvcikgewogICAgICBpZiAobm9kZXMgJiYgY29tYmluYXRv cikgbm9kZXMgPSB0aGlzW2NvbWJpbmF0b3JdKG5vZGVzKTsKICAgICAgaWYgKCFu b2Rlcykgbm9kZXMgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CiAg ICAgIHJldHVybiBTZWxlY3Rvci5wc2V1ZG9zW25hbWVdKG5vZGVzLCB2YWx1ZSwg cm9vdCk7CiAgICB9CiAgfSwKCiAgcHNldWRvczogewogICAgJ2ZpcnN0LWNoaWxk JzogZnVuY3Rpb24obm9kZXMsIHZhbHVlLCByb290KSB7CiAgICAgIGZvciAodmFy IGkgPSAwLCByZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsr KSB7CiAgICAgICAgaWYgKFNlbGVjdG9yLmhhbmRsZXJzLnByZXZpb3VzRWxlbWVu dFNpYmxpbmcobm9kZSkpIGNvbnRpbnVlOwogICAgICAgICAgcmVzdWx0cy5wdXNo KG5vZGUpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHRzOwogICAgfSwKICAg ICdsYXN0LWNoaWxkJzogZnVuY3Rpb24obm9kZXMsIHZhbHVlLCByb290KSB7CiAg ICAgIGZvciAodmFyIGkgPSAwLCByZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBu b2Rlc1tpXTsgaSsrKSB7CiAgICAgICAgaWYgKFNlbGVjdG9yLmhhbmRsZXJzLm5l eHRFbGVtZW50U2libGluZyhub2RlKSkgY29udGludWU7CiAgICAgICAgICByZXN1 bHRzLnB1c2gobm9kZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdHM7CiAg ICB9LAogICAgJ29ubHktY2hpbGQnOiBmdW5jdGlvbihub2RlcywgdmFsdWUsIHJv b3QpIHsKICAgICAgdmFyIGggPSBTZWxlY3Rvci5oYW5kbGVyczsKICAgICAgZm9y ICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ld OyBpKyspCiAgICAgICAgaWYgKCFoLnByZXZpb3VzRWxlbWVudFNpYmxpbmcobm9k ZSkgJiYgIWgubmV4dEVsZW1lbnRTaWJsaW5nKG5vZGUpKQogICAgICAgICAgcmVz dWx0cy5wdXNoKG5vZGUpOwogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0sCiAg ICAnbnRoLWNoaWxkJzogICAgICAgIGZ1bmN0aW9uKG5vZGVzLCBmb3JtdWxhLCBy b290KSB7CiAgICAgIHJldHVybiBTZWxlY3Rvci5wc2V1ZG9zLm50aChub2Rlcywg Zm9ybXVsYSwgcm9vdCk7CiAgICB9LAogICAgJ250aC1sYXN0LWNoaWxkJzogICBm dW5jdGlvbihub2RlcywgZm9ybXVsYSwgcm9vdCkgewogICAgICByZXR1cm4gU2Vs ZWN0b3IucHNldWRvcy5udGgobm9kZXMsIGZvcm11bGEsIHJvb3QsIHRydWUpOwog ICAgfSwKICAgICdudGgtb2YtdHlwZSc6ICAgICAgZnVuY3Rpb24obm9kZXMsIGZv cm11bGEsIHJvb3QpIHsKICAgICAgcmV0dXJuIFNlbGVjdG9yLnBzZXVkb3MubnRo KG5vZGVzLCBmb3JtdWxhLCByb290LCBmYWxzZSwgdHJ1ZSk7CiAgICB9LAogICAg J250aC1sYXN0LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlcywgZm9ybXVsYSwgcm9v dCkgewogICAgICByZXR1cm4gU2VsZWN0b3IucHNldWRvcy5udGgobm9kZXMsIGZv cm11bGEsIHJvb3QsIHRydWUsIHRydWUpOwogICAgfSwKICAgICdmaXJzdC1vZi10 eXBlJzogICAgZnVuY3Rpb24obm9kZXMsIGZvcm11bGEsIHJvb3QpIHsKICAgICAg cmV0dXJuIFNlbGVjdG9yLnBzZXVkb3MubnRoKG5vZGVzLCAiMSIsIHJvb3QsIGZh bHNlLCB0cnVlKTsKICAgIH0sCiAgICAnbGFzdC1vZi10eXBlJzogICAgIGZ1bmN0 aW9uKG5vZGVzLCBmb3JtdWxhLCByb290KSB7CiAgICAgIHJldHVybiBTZWxlY3Rv ci5wc2V1ZG9zLm50aChub2RlcywgIjEiLCByb290LCB0cnVlLCB0cnVlKTsKICAg IH0sCiAgICAnb25seS1vZi10eXBlJzogICAgIGZ1bmN0aW9uKG5vZGVzLCBmb3Jt dWxhLCByb290KSB7CiAgICAgIHZhciBwID0gU2VsZWN0b3IucHNldWRvczsKICAg ICAgcmV0dXJuIHBbJ2xhc3Qtb2YtdHlwZSddKHBbJ2ZpcnN0LW9mLXR5cGUnXShu b2RlcywgZm9ybXVsYSwgcm9vdCksIGZvcm11bGEsIHJvb3QpOwogICAgfSwKCiAg ICAvLyBoYW5kbGVzIHRoZSBhbitiIGxvZ2ljCiAgICBnZXRJbmRpY2VzOiBmdW5j dGlvbihhLCBiLCB0b3RhbCkgewogICAgICBpZiAoYSA9PSAwKSByZXR1cm4gYiA+ IDAgPyBbYl0gOiBbXTsKICAgICAgcmV0dXJuICRSKDEsIHRvdGFsKS5pbmplY3Qo W10sIGZ1bmN0aW9uKG1lbW8sIGkpIHsKICAgICAgICBpZiAoMCA9PSAoaSAtIGIp ICUgYSAmJiAoaSAtIGIpIC8gYSA+PSAwKSBtZW1vLnB1c2goaSk7CiAgICAgICAg cmV0dXJuIG1lbW87CiAgICAgIH0pOwogICAgfSwKCiAgICAvLyBoYW5kbGVzIG50 aCgtbGFzdCktY2hpbGQsIG50aCgtbGFzdCktb2YtdHlwZSwgYW5kIChmaXJzdHxs YXN0KS1vZi10eXBlCiAgICBudGg6IGZ1bmN0aW9uKG5vZGVzLCBmb3JtdWxhLCBy b290LCByZXZlcnNlLCBvZlR5cGUpIHsKICAgICAgaWYgKG5vZGVzLmxlbmd0aCA9 PSAwKSByZXR1cm4gW107CiAgICAgIGlmIChmb3JtdWxhID09ICdldmVuJykgZm9y bXVsYSA9ICcybiswJzsKICAgICAgaWYgKGZvcm11bGEgPT0gJ29kZCcpICBmb3Jt dWxhID0gJzJuKzEnOwogICAgICB2YXIgaCA9IFNlbGVjdG9yLmhhbmRsZXJzLCBy ZXN1bHRzID0gW10sIGluZGV4ZWQgPSBbXSwgbTsKICAgICAgaC5tYXJrKG5vZGVz KTsKICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsg aSsrKSB7CiAgICAgICAgaWYgKCFub2RlLnBhcmVudE5vZGUuX2NvdW50ZWRCeVBy b3RvdHlwZSkgewogICAgICAgICAgaC5pbmRleChub2RlLnBhcmVudE5vZGUsIHJl dmVyc2UsIG9mVHlwZSk7CiAgICAgICAgICBpbmRleGVkLnB1c2gobm9kZS5wYXJl bnROb2RlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGZvcm11bGEubWF0 Y2goL15cZCskLykpIHsgLy8ganVzdCBhIG51bWJlcgogICAgICAgIGZvcm11bGEg PSBOdW1iZXIoZm9ybXVsYSk7CiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7 IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQogICAgICAgICAgaWYgKG5vZGUubm9kZUlu ZGV4ID09IGZvcm11bGEpIHJlc3VsdHMucHVzaChub2RlKTsKICAgICAgfSBlbHNl IGlmIChtID0gZm9ybXVsYS5tYXRjaCgvXigtP1xkKik/bigoWystXSkoXGQrKSk/ LykpIHsgLy8gYW4rYgogICAgICAgIGlmIChtWzFdID09ICItIikgbVsxXSA9IC0x OwogICAgICAgIHZhciBhID0gbVsxXSA/IE51bWJlcihtWzFdKSA6IDE7CiAgICAg ICAgdmFyIGIgPSBtWzJdID8gTnVtYmVyKG1bMl0pIDogMDsKICAgICAgICB2YXIg aW5kaWNlcyA9IFNlbGVjdG9yLnBzZXVkb3MuZ2V0SW5kaWNlcyhhLCBiLCBub2Rl cy5sZW5ndGgpOwogICAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlLCBsID0gaW5k aWNlcy5sZW5ndGg7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKSB7CiAgICAgICAgICBm b3IgKHZhciBqID0gMDsgaiA8IGw7IGorKykKICAgICAgICAgICAgaWYgKG5vZGUu bm9kZUluZGV4ID09IGluZGljZXNbal0pIHJlc3VsdHMucHVzaChub2RlKTsKICAg ICAgICB9CiAgICAgIH0KICAgICAgaC51bm1hcmsobm9kZXMpOwogICAgICBoLnVu bWFyayhpbmRleGVkKTsKICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9LAoKICAg ICdlbXB0eSc6IGZ1bmN0aW9uKG5vZGVzLCB2YWx1ZSwgcm9vdCkgewogICAgICBm b3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNb aV07IGkrKykgewogICAgICAgIC8vIElFIHRyZWF0cyBjb21tZW50cyBhcyBlbGVt ZW50IG5vZGVzCiAgICAgICAgaWYgKG5vZGUudGFnTmFtZSA9PSAnIScgfHwgbm9k ZS5maXJzdENoaWxkKSBjb250aW51ZTsKICAgICAgICByZXN1bHRzLnB1c2gobm9k ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9LAoKICAgICdu b3QnOiBmdW5jdGlvbihub2Rlcywgc2VsZWN0b3IsIHJvb3QpIHsKICAgICAgdmFy IGggPSBTZWxlY3Rvci5oYW5kbGVycywgc2VsZWN0b3JUeXBlLCBtOwogICAgICB2 YXIgZXhjbHVzaW9ucyA9IG5ldyBTZWxlY3RvcihzZWxlY3RvcikuZmluZEVsZW1l bnRzKHJvb3QpOwogICAgICBoLm1hcmsoZXhjbHVzaW9ucyk7CiAgICAgIGZvciAo dmFyIGkgPSAwLCByZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsg aSsrKQogICAgICAgIGlmICghbm9kZS5fY291bnRlZEJ5UHJvdG90eXBlKSByZXN1 bHRzLnB1c2gobm9kZSk7CiAgICAgIGgudW5tYXJrKGV4Y2x1c2lvbnMpOwogICAg ICByZXR1cm4gcmVzdWx0czsKICAgIH0sCgogICAgJ2VuYWJsZWQnOiBmdW5jdGlv bihub2RlcywgdmFsdWUsIHJvb3QpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJl c3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAg aWYgKCFub2RlLmRpc2FibGVkICYmICghbm9kZS50eXBlIHx8IG5vZGUudHlwZSAh PT0gJ2hpZGRlbicpKQogICAgICAgICAgcmVzdWx0cy5wdXNoKG5vZGUpOwogICAg ICByZXR1cm4gcmVzdWx0czsKICAgIH0sCgogICAgJ2Rpc2FibGVkJzogZnVuY3Rp b24obm9kZXMsIHZhbHVlLCByb290KSB7CiAgICAgIGZvciAodmFyIGkgPSAwLCBy ZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQogICAgICAg IGlmIChub2RlLmRpc2FibGVkKSByZXN1bHRzLnB1c2gobm9kZSk7CiAgICAgIHJl dHVybiByZXN1bHRzOwogICAgfSwKCiAgICAnY2hlY2tlZCc6IGZ1bmN0aW9uKG5v ZGVzLCB2YWx1ZSwgcm9vdCkgewogICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0 cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKICAgICAgICBpZiAo bm9kZS5jaGVja2VkKSByZXN1bHRzLnB1c2gobm9kZSk7CiAgICAgIHJldHVybiBy ZXN1bHRzOwogICAgfQogIH0sCgogIG9wZXJhdG9yczogewogICAgJz0nOiAgZnVu Y3Rpb24obnYsIHYpIHsgcmV0dXJuIG52ID09IHY7IH0sCiAgICAnIT0nOiBmdW5j dGlvbihudiwgdikgeyByZXR1cm4gbnYgIT0gdjsgfSwKICAgICdePSc6IGZ1bmN0 aW9uKG52LCB2KSB7IHJldHVybiBudiA9PSB2IHx8IG52ICYmIG52LnN0YXJ0c1dp dGgodik7IH0sCiAgICAnJD0nOiBmdW5jdGlvbihudiwgdikgeyByZXR1cm4gbnYg PT0gdiB8fCBudiAmJiBudi5lbmRzV2l0aCh2KTsgfSwKICAgICcqPSc6IGZ1bmN0 aW9uKG52LCB2KSB7IHJldHVybiBudiA9PSB2IHx8IG52ICYmIG52LmluY2x1ZGUo dik7IH0sCiAgICAnJD0nOiBmdW5jdGlvbihudiwgdikgeyByZXR1cm4gbnYuZW5k c1dpdGgodik7IH0sCiAgICAnKj0nOiBmdW5jdGlvbihudiwgdikgeyByZXR1cm4g bnYuaW5jbHVkZSh2KTsgfSwKICAgICd+PSc6IGZ1bmN0aW9uKG52LCB2KSB7IHJl dHVybiAoJyAnICsgbnYgKyAnICcpLmluY2x1ZGUoJyAnICsgdiArICcgJyk7IH0s CiAgICAnfD0nOiBmdW5jdGlvbihudiwgdikgeyByZXR1cm4gKCctJyArIChudiB8 fCAiIikudG9VcHBlckNhc2UoKSArCiAgICAgJy0nKS5pbmNsdWRlKCctJyArICh2 IHx8ICIiKS50b1VwcGVyQ2FzZSgpICsgJy0nKTsgfQogIH0sCgogIHNwbGl0OiBm dW5jdGlvbihleHByZXNzaW9uKSB7CiAgICB2YXIgZXhwcmVzc2lvbnMgPSBbXTsK ICAgIGV4cHJlc3Npb24uc2NhbigvKChbXHcjOi5+PisoKVxzLV0rfFwqfFxbLio/ XF0pKylccyooLHwkKS8sIGZ1bmN0aW9uKG0pIHsKICAgICAgZXhwcmVzc2lvbnMu cHVzaChtWzFdLnN0cmlwKCkpOwogICAgfSk7CiAgICByZXR1cm4gZXhwcmVzc2lv bnM7CiAgfSwKCiAgbWF0Y2hFbGVtZW50czogZnVuY3Rpb24oZWxlbWVudHMsIGV4 cHJlc3Npb24pIHsKICAgIHZhciBtYXRjaGVzID0gJCQoZXhwcmVzc2lvbiksIGgg PSBTZWxlY3Rvci5oYW5kbGVyczsKICAgIGgubWFyayhtYXRjaGVzKTsKICAgIGZv ciAodmFyIGkgPSAwLCByZXN1bHRzID0gW10sIGVsZW1lbnQ7IGVsZW1lbnQgPSBl bGVtZW50c1tpXTsgaSsrKQogICAgICBpZiAoZWxlbWVudC5fY291bnRlZEJ5UHJv dG90eXBlKSByZXN1bHRzLnB1c2goZWxlbWVudCk7CiAgICBoLnVubWFyayhtYXRj aGVzKTsKICAgIHJldHVybiByZXN1bHRzOwogIH0sCgogIGZpbmRFbGVtZW50OiBm dW5jdGlvbihlbGVtZW50cywgZXhwcmVzc2lvbiwgaW5kZXgpIHsKICAgIGlmIChP YmplY3QuaXNOdW1iZXIoZXhwcmVzc2lvbikpIHsKICAgICAgaW5kZXggPSBleHBy ZXNzaW9uOyBleHByZXNzaW9uID0gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gU2Vs ZWN0b3IubWF0Y2hFbGVtZW50cyhlbGVtZW50cywgZXhwcmVzc2lvbiB8fCAnKicp W2luZGV4IHx8IDBdOwogIH0sCgogIGZpbmRDaGlsZEVsZW1lbnRzOiBmdW5jdGlv bihlbGVtZW50LCBleHByZXNzaW9ucykgewogICAgZXhwcmVzc2lvbnMgPSBTZWxl Y3Rvci5zcGxpdChleHByZXNzaW9ucy5qb2luKCcsJykpOwogICAgdmFyIHJlc3Vs dHMgPSBbXSwgaCA9IFNlbGVjdG9yLmhhbmRsZXJzOwogICAgZm9yICh2YXIgaSA9 IDAsIGwgPSBleHByZXNzaW9ucy5sZW5ndGgsIHNlbGVjdG9yOyBpIDwgbDsgaSsr KSB7CiAgICAgIHNlbGVjdG9yID0gbmV3IFNlbGVjdG9yKGV4cHJlc3Npb25zW2ld LnN0cmlwKCkpOwogICAgICBoLmNvbmNhdChyZXN1bHRzLCBzZWxlY3Rvci5maW5k RWxlbWVudHMoZWxlbWVudCkpOwogICAgfQogICAgcmV0dXJuIChsID4gMSkgPyBo LnVuaXF1ZShyZXN1bHRzKSA6IHJlc3VsdHM7CiAgfQp9KTsKCmlmIChQcm90b3R5 cGUuQnJvd3Nlci5JRSkgewogIE9iamVjdC5leHRlbmQoU2VsZWN0b3IuaGFuZGxl cnMsIHsKICAgIC8vIElFIHJldHVybnMgY29tbWVudCBub2RlcyBvbiBnZXRFbGVt ZW50c0J5VGFnTmFtZSgiKiIpLgogICAgLy8gRmlsdGVyIHRoZW0gb3V0LgogICAg Y29uY2F0OiBmdW5jdGlvbihhLCBiKSB7CiAgICAgIGZvciAodmFyIGkgPSAwLCBu b2RlOyBub2RlID0gYltpXTsgaSsrKQogICAgICAgIGlmIChub2RlLnRhZ05hbWUg IT09ICIhIikgYS5wdXNoKG5vZGUpOwogICAgICByZXR1cm4gYTsKICAgIH0sCgog ICAgLy8gSUUgaW1wcm9wZXJseSBzZXJpYWxpemVzIF9jb3VudGVkQnlQcm90b3R5 cGUgaW4gKGlubmVyfG91dGVyKUhUTUwuCiAgICB1bm1hcms6IGZ1bmN0aW9uKG5v ZGVzKSB7CiAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNb aV07IGkrKykKICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnX2NvdW50ZWRC eVByb3RvdHlwZScpOwogICAgICByZXR1cm4gbm9kZXM7CiAgICB9CiAgfSk7Cn0K CmZ1bmN0aW9uICQkKCkgewogIHJldHVybiBTZWxlY3Rvci5maW5kQ2hpbGRFbGVt ZW50cyhkb2N1bWVudCwgJEEoYXJndW1lbnRzKSk7Cn0KdmFyIEZvcm0gPSB7CiAg cmVzZXQ6IGZ1bmN0aW9uKGZvcm0pIHsKICAgICQoZm9ybSkucmVzZXQoKTsKICAg IHJldHVybiBmb3JtOwogIH0sCgogIHNlcmlhbGl6ZUVsZW1lbnRzOiBmdW5jdGlv bihlbGVtZW50cywgb3B0aW9ucykgewogICAgaWYgKHR5cGVvZiBvcHRpb25zICE9 ICdvYmplY3QnKSBvcHRpb25zID0geyBoYXNoOiAhIW9wdGlvbnMgfTsKICAgIGVs c2UgaWYgKE9iamVjdC5pc1VuZGVmaW5lZChvcHRpb25zLmhhc2gpKSBvcHRpb25z Lmhhc2ggPSB0cnVlOwogICAgdmFyIGtleSwgdmFsdWUsIHN1Ym1pdHRlZCA9IGZh bHNlLCBzdWJtaXQgPSBvcHRpb25zLnN1Ym1pdDsKCiAgICB2YXIgZGF0YSA9IGVs ZW1lbnRzLmluamVjdCh7IH0sIGZ1bmN0aW9uKHJlc3VsdCwgZWxlbWVudCkgewog ICAgICBpZiAoIWVsZW1lbnQuZGlzYWJsZWQgJiYgZWxlbWVudC5uYW1lKSB7CiAg ICAgICAga2V5ID0gZWxlbWVudC5uYW1lOyB2YWx1ZSA9ICQoZWxlbWVudCkuZ2V0 VmFsdWUoKTsKICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBlbGVtZW50LnR5 cGUgIT0gJ2ZpbGUnICYmIChlbGVtZW50LnR5cGUgIT0gJ3N1Ym1pdCcgfHwgKCFz dWJtaXR0ZWQgJiYKICAgICAgICAgICAgc3VibWl0ICE9PSBmYWxzZSAmJiAoIXN1 Ym1pdCB8fCBrZXkgPT0gc3VibWl0KSAmJiAoc3VibWl0dGVkID0gdHJ1ZSkpKSkg ewogICAgICAgICAgaWYgKGtleSBpbiByZXN1bHQpIHsKICAgICAgICAgICAgLy8g YSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50OyBjb25zdHJ1Y3QgYW4gYXJyYXkgb2Yg dmFsdWVzCiAgICAgICAgICAgIGlmICghT2JqZWN0LmlzQXJyYXkocmVzdWx0W2tl eV0pKSByZXN1bHRba2V5XSA9IFtyZXN1bHRba2V5XV07CiAgICAgICAgICAgIHJl c3VsdFtrZXldLnB1c2godmFsdWUpOwogICAgICAgICAgfQogICAgICAgICAgZWxz ZSByZXN1bHRba2V5XSA9IHZhbHVlOwogICAgICAgIH0KICAgICAgfQogICAgICBy ZXR1cm4gcmVzdWx0OwogICAgfSk7CgogICAgcmV0dXJuIG9wdGlvbnMuaGFzaCA/ IGRhdGEgOiBPYmplY3QudG9RdWVyeVN0cmluZyhkYXRhKTsKICB9Cn07CgpGb3Jt Lk1ldGhvZHMgPSB7CiAgc2VyaWFsaXplOiBmdW5jdGlvbihmb3JtLCBvcHRpb25z KSB7CiAgICByZXR1cm4gRm9ybS5zZXJpYWxpemVFbGVtZW50cyhGb3JtLmdldEVs ZW1lbnRzKGZvcm0pLCBvcHRpb25zKTsKICB9LAoKICBnZXRFbGVtZW50czogZnVu Y3Rpb24oZm9ybSkgewogICAgcmV0dXJuICRBKCQoZm9ybSkuZ2V0RWxlbWVudHNC eVRhZ05hbWUoJyonKSkuaW5qZWN0KFtdLAogICAgICBmdW5jdGlvbihlbGVtZW50 cywgY2hpbGQpIHsKICAgICAgICBpZiAoRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJz W2NoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0pCiAgICAgICAgICBlbGVtZW50 cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGNoaWxkKSk7CiAgICAgICAgcmV0dXJuIGVs ZW1lbnRzOwogICAgICB9CiAgICApOwogIH0sCgogIGdldElucHV0czogZnVuY3Rp b24oZm9ybSwgdHlwZU5hbWUsIG5hbWUpIHsKICAgIGZvcm0gPSAkKGZvcm0pOwog ICAgdmFyIGlucHV0cyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0 Jyk7CgogICAgaWYgKCF0eXBlTmFtZSAmJiAhbmFtZSkgcmV0dXJuICRBKGlucHV0 cykubWFwKEVsZW1lbnQuZXh0ZW5kKTsKCiAgICBmb3IgKHZhciBpID0gMCwgbWF0 Y2hpbmdJbnB1dHMgPSBbXSwgbGVuZ3RoID0gaW5wdXRzLmxlbmd0aDsgaSA8IGxl bmd0aDsgaSsrKSB7CiAgICAgIHZhciBpbnB1dCA9IGlucHV0c1tpXTsKICAgICAg aWYgKCh0eXBlTmFtZSAmJiBpbnB1dC50eXBlICE9IHR5cGVOYW1lKSB8fCAobmFt ZSAmJiBpbnB1dC5uYW1lICE9IG5hbWUpKQogICAgICAgIGNvbnRpbnVlOwogICAg ICBtYXRjaGluZ0lucHV0cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGlucHV0KSk7CiAg ICB9CgogICAgcmV0dXJuIG1hdGNoaW5nSW5wdXRzOwogIH0sCgogIGRpc2FibGU6 IGZ1bmN0aW9uKGZvcm0pIHsKICAgIGZvcm0gPSAkKGZvcm0pOwogICAgRm9ybS5n ZXRFbGVtZW50cyhmb3JtKS5pbnZva2UoJ2Rpc2FibGUnKTsKICAgIHJldHVybiBm b3JtOwogIH0sCgogIGVuYWJsZTogZnVuY3Rpb24oZm9ybSkgewogICAgZm9ybSA9 ICQoZm9ybSk7CiAgICBGb3JtLmdldEVsZW1lbnRzKGZvcm0pLmludm9rZSgnZW5h YmxlJyk7CiAgICByZXR1cm4gZm9ybTsKICB9LAoKICBmaW5kRmlyc3RFbGVtZW50 OiBmdW5jdGlvbihmb3JtKSB7CiAgICB2YXIgZWxlbWVudHMgPSAkKGZvcm0pLmdl dEVsZW1lbnRzKCkuZmluZEFsbChmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgIHJl dHVybiAnaGlkZGVuJyAhPSBlbGVtZW50LnR5cGUgJiYgIWVsZW1lbnQuZGlzYWJs ZWQ7CiAgICB9KTsKICAgIHZhciBmaXJzdEJ5SW5kZXggPSBlbGVtZW50cy5maW5k QWxsKGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQuaGFz QXR0cmlidXRlKCd0YWJJbmRleCcpICYmIGVsZW1lbnQudGFiSW5kZXggPj0gMDsK ICAgIH0pLnNvcnRCeShmdW5jdGlvbihlbGVtZW50KSB7IHJldHVybiBlbGVtZW50 LnRhYkluZGV4IH0pLmZpcnN0KCk7CgogICAgcmV0dXJuIGZpcnN0QnlJbmRleCA/ IGZpcnN0QnlJbmRleCA6IGVsZW1lbnRzLmZpbmQoZnVuY3Rpb24oZWxlbWVudCkg ewogICAgICByZXR1cm4gWydpbnB1dCcsICdzZWxlY3QnLCAndGV4dGFyZWEnXS5p bmNsdWRlKGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKICAgIH0pOwog IH0sCgogIGZvY3VzRmlyc3RFbGVtZW50OiBmdW5jdGlvbihmb3JtKSB7CiAgICBm b3JtID0gJChmb3JtKTsKICAgIGZvcm0uZmluZEZpcnN0RWxlbWVudCgpLmFjdGl2 YXRlKCk7CiAgICByZXR1cm4gZm9ybTsKICB9LAoKICByZXF1ZXN0OiBmdW5jdGlv bihmb3JtLCBvcHRpb25zKSB7CiAgICBmb3JtID0gJChmb3JtKSwgb3B0aW9ucyA9 IE9iamVjdC5jbG9uZShvcHRpb25zIHx8IHsgfSk7CgogICAgdmFyIHBhcmFtcyA9 IG9wdGlvbnMucGFyYW1ldGVycywgYWN0aW9uID0gZm9ybS5yZWFkQXR0cmlidXRl KCdhY3Rpb24nKSB8fCAnJzsKICAgIGlmIChhY3Rpb24uYmxhbmsoKSkgYWN0aW9u ID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CiAgICBvcHRpb25zLnBhcmFtZXRlcnMg PSBmb3JtLnNlcmlhbGl6ZSh0cnVlKTsKCiAgICBpZiAocGFyYW1zKSB7CiAgICAg IGlmIChPYmplY3QuaXNTdHJpbmcocGFyYW1zKSkgcGFyYW1zID0gcGFyYW1zLnRv UXVlcnlQYXJhbXMoKTsKICAgICAgT2JqZWN0LmV4dGVuZChvcHRpb25zLnBhcmFt ZXRlcnMsIHBhcmFtcyk7CiAgICB9CgogICAgaWYgKGZvcm0uaGFzQXR0cmlidXRl KCdtZXRob2QnKSAmJiAhb3B0aW9ucy5tZXRob2QpCiAgICAgIG9wdGlvbnMubWV0 aG9kID0gZm9ybS5tZXRob2Q7CgogICAgcmV0dXJuIG5ldyBBamF4LlJlcXVlc3Qo YWN0aW9uLCBvcHRpb25zKTsKICB9Cn07CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKi8KCkZvcm0uRWxlbWVudCA9IHsKICBmb2N1czogZnVuY3Rpb24oZWxl bWVudCkgewogICAgJChlbGVtZW50KS5mb2N1cygpOwogICAgcmV0dXJuIGVsZW1l bnQ7CiAgfSwKCiAgc2VsZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAkKGVs ZW1lbnQpLnNlbGVjdCgpOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfQp9OwoKRm9y bS5FbGVtZW50Lk1ldGhvZHMgPSB7CiAgc2VyaWFsaXplOiBmdW5jdGlvbihlbGVt ZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmICghZWxlbWVu dC5kaXNhYmxlZCAmJiBlbGVtZW50Lm5hbWUpIHsKICAgICAgdmFyIHZhbHVlID0g ZWxlbWVudC5nZXRWYWx1ZSgpOwogICAgICBpZiAodmFsdWUgIT0gdW5kZWZpbmVk KSB7CiAgICAgICAgdmFyIHBhaXIgPSB7IH07CiAgICAgICAgcGFpcltlbGVtZW50 Lm5hbWVdID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIE9iamVjdC50b1F1ZXJ5U3Ry aW5nKHBhaXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gJyc7CiAgfSwKCiAg Z2V0VmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVs ZW1lbnQpOwogICAgdmFyIG1ldGhvZCA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2Vy Q2FzZSgpOwogICAgcmV0dXJuIEZvcm0uRWxlbWVudC5TZXJpYWxpemVyc1ttZXRo b2RdKGVsZW1lbnQpOwogIH0sCgogIHNldFZhbHVlOiBmdW5jdGlvbihlbGVtZW50 LCB2YWx1ZSkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB2YXIgbWV0 aG9kID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CiAgICBGb3JtLkVs ZW1lbnQuU2VyaWFsaXplcnNbbWV0aG9kXShlbGVtZW50LCB2YWx1ZSk7CiAgICBy ZXR1cm4gZWxlbWVudDsKICB9LAoKICBjbGVhcjogZnVuY3Rpb24oZWxlbWVudCkg ewogICAgJChlbGVtZW50KS52YWx1ZSA9ICcnOwogICAgcmV0dXJuIGVsZW1lbnQ7 CiAgfSwKCiAgcHJlc2VudDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgcmV0dXJu ICQoZWxlbWVudCkudmFsdWUgIT0gJyc7CiAgfSwKCiAgYWN0aXZhdGU6IGZ1bmN0 aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdHJ5 IHsKICAgICAgZWxlbWVudC5mb2N1cygpOwogICAgICBpZiAoZWxlbWVudC5zZWxl Y3QgJiYgKGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9ICdpbnB1dCcg fHwKICAgICAgICAgICFbJ2J1dHRvbicsICdyZXNldCcsICdzdWJtaXQnXS5pbmNs dWRlKGVsZW1lbnQudHlwZSkpKQogICAgICAgIGVsZW1lbnQuc2VsZWN0KCk7CiAg ICB9IGNhdGNoIChlKSB7IH0KICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIGRp c2FibGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1l bnQpOwogICAgZWxlbWVudC5kaXNhYmxlZCA9IHRydWU7CiAgICByZXR1cm4gZWxl bWVudDsKICB9LAoKICBlbmFibGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVs ZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgZWxlbWVudC5kaXNhYmxlZCA9IGZhbHNl OwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfQp9OwoKLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSovCgp2YXIgRmllbGQgPSBGb3JtLkVsZW1lbnQ7CnZhciAkRiA9 IEZvcm0uRWxlbWVudC5NZXRob2RzLmdldFZhbHVlOwoKLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCgpGb3JtLkVsZW1lbnQuU2VyaWFsaXplcnMgPSB7CiAg aW5wdXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7CiAgICBzd2l0Y2ggKGVs ZW1lbnQudHlwZS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgIGNhc2UgJ2NoZWNrYm94 JzoKICAgICAgY2FzZSAncmFkaW8nOgogICAgICAgIHJldHVybiBGb3JtLkVsZW1l bnQuU2VyaWFsaXplcnMuaW5wdXRTZWxlY3RvcihlbGVtZW50LCB2YWx1ZSk7CiAg ICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIEZvcm0uRWxlbWVudC5TZXJpYWxp emVycy50ZXh0YXJlYShlbGVtZW50LCB2YWx1ZSk7CiAgICB9CiAgfSwKCiAgaW5w dXRTZWxlY3RvcjogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKICAgIGlmIChP YmplY3QuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm4gZWxlbWVudC5jaGVja2Vk ID8gZWxlbWVudC52YWx1ZSA6IG51bGw7CiAgICBlbHNlIGVsZW1lbnQuY2hlY2tl ZCA9ICEhdmFsdWU7CiAgfSwKCiAgdGV4dGFyZWE6IGZ1bmN0aW9uKGVsZW1lbnQs IHZhbHVlKSB7CiAgICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0 dXJuIGVsZW1lbnQudmFsdWU7CiAgICBlbHNlIGVsZW1lbnQudmFsdWUgPSB2YWx1 ZTsKICB9LAoKICBzZWxlY3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7CiAg ICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkKICAgICAgcmV0dXJuIHRo aXNbZWxlbWVudC50eXBlID09ICdzZWxlY3Qtb25lJyA/CiAgICAgICAgJ3NlbGVj dE9uZScgOiAnc2VsZWN0TWFueSddKGVsZW1lbnQpOwogICAgZWxzZSB7CiAgICAg IHZhciBvcHQsIGN1cnJlbnRWYWx1ZSwgc2luZ2xlID0gIU9iamVjdC5pc0FycmF5 KHZhbHVlKTsKICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGVsZW1lbnQu bGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBvcHQgPSBlbGVtZW50 Lm9wdGlvbnNbaV07CiAgICAgICAgY3VycmVudFZhbHVlID0gdGhpcy5vcHRpb25W YWx1ZShvcHQpOwogICAgICAgIGlmIChzaW5nbGUpIHsKICAgICAgICAgIGlmIChj dXJyZW50VmFsdWUgPT0gdmFsdWUpIHsKICAgICAgICAgICAgb3B0LnNlbGVjdGVk ID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAg IH0KICAgICAgICBlbHNlIG9wdC5zZWxlY3RlZCA9IHZhbHVlLmluY2x1ZGUoY3Vy cmVudFZhbHVlKTsKICAgICAgfQogICAgfQogIH0sCgogIHNlbGVjdE9uZTogZnVu Y3Rpb24oZWxlbWVudCkgewogICAgdmFyIGluZGV4ID0gZWxlbWVudC5zZWxlY3Rl ZEluZGV4OwogICAgcmV0dXJuIGluZGV4ID49IDAgPyB0aGlzLm9wdGlvblZhbHVl KGVsZW1lbnQub3B0aW9uc1tpbmRleF0pIDogbnVsbDsKICB9LAoKICBzZWxlY3RN YW55OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB2YXIgdmFsdWVzLCBsZW5ndGgg PSBlbGVtZW50Lmxlbmd0aDsKICAgIGlmICghbGVuZ3RoKSByZXR1cm4gbnVsbDsK CiAgICBmb3IgKHZhciBpID0gMCwgdmFsdWVzID0gW107IGkgPCBsZW5ndGg7IGkr KykgewogICAgICB2YXIgb3B0ID0gZWxlbWVudC5vcHRpb25zW2ldOwogICAgICBp ZiAob3B0LnNlbGVjdGVkKSB2YWx1ZXMucHVzaCh0aGlzLm9wdGlvblZhbHVlKG9w dCkpOwogICAgfQogICAgcmV0dXJuIHZhbHVlczsKICB9LAoKICBvcHRpb25WYWx1 ZTogZnVuY3Rpb24ob3B0KSB7CiAgICAvLyBleHRlbmQgZWxlbWVudCBiZWNhdXNl IGhhc0F0dHJpYnV0ZSBtYXkgbm90IGJlIG5hdGl2ZQogICAgcmV0dXJuIEVsZW1l bnQuZXh0ZW5kKG9wdCkuaGFzQXR0cmlidXRlKCd2YWx1ZScpID8gb3B0LnZhbHVl IDogb3B0LnRleHQ7CiAgfQp9OwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCgpBYnN0cmFjdC5UaW1lZE9ic2VydmVyID0gQ2xhc3MuY3JlYXRlKFBlcmlv ZGljYWxFeGVjdXRlciwgewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKCRzdXBlciwg ZWxlbWVudCwgZnJlcXVlbmN5LCBjYWxsYmFjaykgewogICAgJHN1cGVyKGNhbGxi YWNrLCBmcmVxdWVuY3kpOwogICAgdGhpcy5lbGVtZW50ICAgPSAkKGVsZW1lbnQp OwogICAgdGhpcy5sYXN0VmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7CiAgfSwKCiAg ZXhlY3V0ZTogZnVuY3Rpb24oKSB7CiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZh bHVlKCk7CiAgICBpZiAoT2JqZWN0LmlzU3RyaW5nKHRoaXMubGFzdFZhbHVlKSAm JiBPYmplY3QuaXNTdHJpbmcodmFsdWUpID8KICAgICAgICB0aGlzLmxhc3RWYWx1 ZSAhPSB2YWx1ZSA6IFN0cmluZyh0aGlzLmxhc3RWYWx1ZSkgIT0gU3RyaW5nKHZh bHVlKSkgewogICAgICB0aGlzLmNhbGxiYWNrKHRoaXMuZWxlbWVudCwgdmFsdWUp OwogICAgICB0aGlzLmxhc3RWYWx1ZSA9IHZhbHVlOwogICAgfQogIH0KfSk7CgpG b3JtLkVsZW1lbnQuT2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUoQWJzdHJhY3QuVGlt ZWRPYnNlcnZlciwgewogIGdldFZhbHVlOiBmdW5jdGlvbigpIHsKICAgIHJldHVy biBGb3JtLkVsZW1lbnQuZ2V0VmFsdWUodGhpcy5lbGVtZW50KTsKICB9Cn0pOwoK Rm9ybS5PYnNlcnZlciA9IENsYXNzLmNyZWF0ZShBYnN0cmFjdC5UaW1lZE9ic2Vy dmVyLCB7CiAgZ2V0VmFsdWU6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIEZvcm0u c2VyaWFsaXplKHRoaXMuZWxlbWVudCk7CiAgfQp9KTsKCi8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0qLwoKQWJzdHJhY3QuRXZlbnRPYnNlcnZlciA9IENsYXNz LmNyZWF0ZSh7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgY2FsbGJh Y2spIHsKICAgIHRoaXMuZWxlbWVudCAgPSAkKGVsZW1lbnQpOwogICAgdGhpcy5j YWxsYmFjayA9IGNhbGxiYWNrOwoKICAgIHRoaXMubGFzdFZhbHVlID0gdGhpcy5n ZXRWYWx1ZSgpOwogICAgaWYgKHRoaXMuZWxlbWVudC50YWdOYW1lLnRvTG93ZXJD YXNlKCkgPT0gJ2Zvcm0nKQogICAgICB0aGlzLnJlZ2lzdGVyRm9ybUNhbGxiYWNr cygpOwogICAgZWxzZQogICAgICB0aGlzLnJlZ2lzdGVyQ2FsbGJhY2sodGhpcy5l bGVtZW50KTsKICB9LAoKICBvbkVsZW1lbnRFdmVudDogZnVuY3Rpb24oKSB7CiAg ICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7CiAgICBpZiAodGhpcy5sYXN0 VmFsdWUgIT0gdmFsdWUpIHsKICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLmVsZW1l bnQsIHZhbHVlKTsKICAgICAgdGhpcy5sYXN0VmFsdWUgPSB2YWx1ZTsKICAgIH0K ICB9LAoKICByZWdpc3RlckZvcm1DYWxsYmFja3M6IGZ1bmN0aW9uKCkgewogICAg Rm9ybS5nZXRFbGVtZW50cyh0aGlzLmVsZW1lbnQpLmVhY2godGhpcy5yZWdpc3Rl ckNhbGxiYWNrLCB0aGlzKTsKICB9LAoKICByZWdpc3RlckNhbGxiYWNrOiBmdW5j dGlvbihlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudC50eXBlKSB7CiAgICAgIHN3 aXRjaCAoZWxlbWVudC50eXBlLnRvTG93ZXJDYXNlKCkpIHsKICAgICAgICBjYXNl ICdjaGVja2JveCc6CiAgICAgICAgY2FzZSAncmFkaW8nOgogICAgICAgICAgRXZl bnQub2JzZXJ2ZShlbGVtZW50LCAnY2xpY2snLCB0aGlzLm9uRWxlbWVudEV2ZW50 LmJpbmQodGhpcykpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoK ICAgICAgICAgIEV2ZW50Lm9ic2VydmUoZWxlbWVudCwgJ2NoYW5nZScsIHRoaXMu b25FbGVtZW50RXZlbnQuYmluZCh0aGlzKSk7CiAgICAgICAgICBicmVhazsKICAg ICAgfQogICAgfQogIH0KfSk7CgpGb3JtLkVsZW1lbnQuRXZlbnRPYnNlcnZlciA9 IENsYXNzLmNyZWF0ZShBYnN0cmFjdC5FdmVudE9ic2VydmVyLCB7CiAgZ2V0VmFs dWU6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIEZvcm0uRWxlbWVudC5nZXRWYWx1 ZSh0aGlzLmVsZW1lbnQpOwogIH0KfSk7CgpGb3JtLkV2ZW50T2JzZXJ2ZXIgPSBD bGFzcy5jcmVhdGUoQWJzdHJhY3QuRXZlbnRPYnNlcnZlciwgewogIGdldFZhbHVl OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBGb3JtLnNlcmlhbGl6ZSh0aGlzLmVs ZW1lbnQpOwogIH0KfSk7CmlmICghd2luZG93LkV2ZW50KSB2YXIgRXZlbnQgPSB7 IH07CgpPYmplY3QuZXh0ZW5kKEV2ZW50LCB7CiAgS0VZX0JBQ0tTUEFDRTogOCwK ICBLRVlfVEFCOiAgICAgICA5LAogIEtFWV9SRVRVUk46ICAgMTMsCiAgS0VZX0VT QzogICAgICAyNywKICBLRVlfTEVGVDogICAgIDM3LAogIEtFWV9VUDogICAgICAg MzgsCiAgS0VZX1JJR0hUOiAgICAzOSwKICBLRVlfRE9XTjogICAgIDQwLAogIEtF WV9ERUxFVEU6ICAgNDYsCiAgS0VZX0hPTUU6ICAgICAzNiwKICBLRVlfRU5EOiAg ICAgIDM1LAogIEtFWV9QQUdFVVA6ICAgMzMsCiAgS0VZX1BBR0VET1dOOiAzNCwK ICBLRVlfSU5TRVJUOiAgIDQ1LAoKICBjYWNoZTogeyB9LAoKICByZWxhdGVkVGFy Z2V0OiBmdW5jdGlvbihldmVudCkgewogICAgdmFyIGVsZW1lbnQ7CiAgICBzd2l0 Y2goZXZlbnQudHlwZSkgewogICAgICBjYXNlICdtb3VzZW92ZXInOiBlbGVtZW50 ID0gZXZlbnQuZnJvbUVsZW1lbnQ7IGJyZWFrOwogICAgICBjYXNlICdtb3VzZW91 dCc6ICBlbGVtZW50ID0gZXZlbnQudG9FbGVtZW50OyAgIGJyZWFrOwogICAgICBk ZWZhdWx0OiByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBFbGVtZW50LmV4 dGVuZChlbGVtZW50KTsKICB9Cn0pOwoKRXZlbnQuTWV0aG9kcyA9IChmdW5jdGlv bigpIHsKICB2YXIgaXNCdXR0b247CgogIGlmIChQcm90b3R5cGUuQnJvd3Nlci5J RSkgewogICAgdmFyIGJ1dHRvbk1hcCA9IHsgMDogMSwgMTogNCwgMjogMiB9Owog ICAgaXNCdXR0b24gPSBmdW5jdGlvbihldmVudCwgY29kZSkgewogICAgICByZXR1 cm4gZXZlbnQuYnV0dG9uID09IGJ1dHRvbk1hcFtjb2RlXTsKICAgIH07CgogIH0g ZWxzZSBpZiAoUHJvdG90eXBlLkJyb3dzZXIuV2ViS2l0KSB7CiAgICBpc0J1dHRv biA9IGZ1bmN0aW9uKGV2ZW50LCBjb2RlKSB7CiAgICAgIHN3aXRjaCAoY29kZSkg ewogICAgICAgIGNhc2UgMDogcmV0dXJuIGV2ZW50LndoaWNoID09IDEgJiYgIWV2 ZW50Lm1ldGFLZXk7CiAgICAgICAgY2FzZSAxOiByZXR1cm4gZXZlbnQud2hpY2gg PT0gMSAmJiBldmVudC5tZXRhS2V5OwogICAgICAgIGRlZmF1bHQ6IHJldHVybiBm YWxzZTsKICAgICAgfQogICAgfTsKCiAgfSBlbHNlIHsKICAgIGlzQnV0dG9uID0g ZnVuY3Rpb24oZXZlbnQsIGNvZGUpIHsKICAgICAgcmV0dXJuIGV2ZW50LndoaWNo ID8gKGV2ZW50LndoaWNoID09PSBjb2RlICsgMSkgOiAoZXZlbnQuYnV0dG9uID09 PSBjb2RlKTsKICAgIH07CiAgfQoKICByZXR1cm4gewogICAgaXNMZWZ0Q2xpY2s6 ICAgZnVuY3Rpb24oZXZlbnQpIHsgcmV0dXJuIGlzQnV0dG9uKGV2ZW50LCAwKSB9 LAogICAgaXNNaWRkbGVDbGljazogZnVuY3Rpb24oZXZlbnQpIHsgcmV0dXJuIGlz QnV0dG9uKGV2ZW50LCAxKSB9LAogICAgaXNSaWdodENsaWNrOiAgZnVuY3Rpb24o ZXZlbnQpIHsgcmV0dXJuIGlzQnV0dG9uKGV2ZW50LCAyKSB9LAoKICAgIGVsZW1l bnQ6IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIGV2ZW50ID0gRXZlbnQuZXh0ZW5k KGV2ZW50KTsKCiAgICAgIHZhciBub2RlICAgICAgICAgID0gZXZlbnQudGFyZ2V0 LAogICAgICAgICAgdHlwZSAgICAgICAgICA9IGV2ZW50LnR5cGUsCiAgICAgICAg ICBjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldDsKCiAgICAgIGlm IChjdXJyZW50VGFyZ2V0ICYmIGN1cnJlbnRUYXJnZXQudGFnTmFtZSkgewogICAg ICAgIC8vIEZpcmVmb3ggc2NyZXdzIHVwIHRoZSAiY2xpY2siIGV2ZW50IHdoZW4g bW92aW5nIGJldHdlZW4gcmFkaW8gYnV0dG9ucwogICAgICAgIC8vIHZpYSBhcnJv dyBrZXlzLiBJdCBhbHNvIHNjcmV3cyB1cCB0aGUgImxvYWQiIGFuZCAiZXJyb3Ii IGV2ZW50cyBvbiBpbWFnZXMsCiAgICAgICAgLy8gcmVwb3J0aW5nIHRoZSBkb2N1 bWVudCBhcyB0aGUgdGFyZ2V0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGltYWdl LgogICAgICAgIGlmICh0eXBlID09PSAnbG9hZCcgfHwgdHlwZSA9PT0gJ2Vycm9y JyB8fAogICAgICAgICAgKHR5cGUgPT09ICdjbGljaycgJiYgY3VycmVudFRhcmdl dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcKICAgICAgICAgICAg JiYgY3VycmVudFRhcmdldC50eXBlID09PSAncmFkaW8nKSkKICAgICAgICAgICAg ICBub2RlID0gY3VycmVudFRhcmdldDsKICAgICAgfQogICAgICBpZiAobm9kZS5u b2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERSkgbm9kZSA9IG5vZGUucGFyZW50Tm9k ZTsKICAgICAgcmV0dXJuIEVsZW1lbnQuZXh0ZW5kKG5vZGUpOwogICAgfSwKCiAg ICBmaW5kRWxlbWVudDogZnVuY3Rpb24oZXZlbnQsIGV4cHJlc3Npb24pIHsKICAg ICAgdmFyIGVsZW1lbnQgPSBFdmVudC5lbGVtZW50KGV2ZW50KTsKICAgICAgaWYg KCFleHByZXNzaW9uKSByZXR1cm4gZWxlbWVudDsKICAgICAgdmFyIGVsZW1lbnRz ID0gW2VsZW1lbnRdLmNvbmNhdChlbGVtZW50LmFuY2VzdG9ycygpKTsKICAgICAg cmV0dXJuIFNlbGVjdG9yLmZpbmRFbGVtZW50KGVsZW1lbnRzLCBleHByZXNzaW9u LCAwKTsKICAgIH0sCgogICAgcG9pbnRlcjogZnVuY3Rpb24oZXZlbnQpIHsKICAg ICAgdmFyIGRvY0VsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCiAg ICAgIGJvZHkgPSBkb2N1bWVudC5ib2R5IHx8IHsgc2Nyb2xsTGVmdDogMCwgc2Ny b2xsVG9wOiAwIH07CiAgICAgIHJldHVybiB7CiAgICAgICAgeDogZXZlbnQucGFn ZVggfHwgKGV2ZW50LmNsaWVudFggKwogICAgICAgICAgKGRvY0VsZW1lbnQuc2Ny b2xsTGVmdCB8fCBib2R5LnNjcm9sbExlZnQpIC0KICAgICAgICAgIChkb2NFbGVt ZW50LmNsaWVudExlZnQgfHwgMCkpLAogICAgICAgIHk6IGV2ZW50LnBhZ2VZIHx8 IChldmVudC5jbGllbnRZICsKICAgICAgICAgIChkb2NFbGVtZW50LnNjcm9sbFRv cCB8fCBib2R5LnNjcm9sbFRvcCkgLQogICAgICAgICAgKGRvY0VsZW1lbnQuY2xp ZW50VG9wIHx8IDApKQogICAgICB9OwogICAgfSwKCiAgICBwb2ludGVyWDogZnVu Y3Rpb24oZXZlbnQpIHsgcmV0dXJuIEV2ZW50LnBvaW50ZXIoZXZlbnQpLnggfSwK ICAgIHBvaW50ZXJZOiBmdW5jdGlvbihldmVudCkgeyByZXR1cm4gRXZlbnQucG9p bnRlcihldmVudCkueSB9LAoKICAgIHN0b3A6IGZ1bmN0aW9uKGV2ZW50KSB7CiAg ICAgIEV2ZW50LmV4dGVuZChldmVudCk7CiAgICAgIGV2ZW50LnByZXZlbnREZWZh dWx0KCk7CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBldmVu dC5zdG9wcGVkID0gdHJ1ZTsKICAgIH0KICB9Owp9KSgpOwoKRXZlbnQuZXh0ZW5k ID0gKGZ1bmN0aW9uKCkgewogIHZhciBtZXRob2RzID0gT2JqZWN0LmtleXMoRXZl bnQuTWV0aG9kcykuaW5qZWN0KHsgfSwgZnVuY3Rpb24obSwgbmFtZSkgewogICAg bVtuYW1lXSA9IEV2ZW50Lk1ldGhvZHNbbmFtZV0ubWV0aG9kaXplKCk7CiAgICBy ZXR1cm4gbTsKICB9KTsKCiAgaWYgKFByb3RvdHlwZS5Ccm93c2VyLklFKSB7CiAg ICBPYmplY3QuZXh0ZW5kKG1ldGhvZHMsIHsKICAgICAgc3RvcFByb3BhZ2F0aW9u OiBmdW5jdGlvbigpIHsgdGhpcy5jYW5jZWxCdWJibGUgPSB0cnVlIH0sCiAgICAg IHByZXZlbnREZWZhdWx0OiAgZnVuY3Rpb24oKSB7IHRoaXMucmV0dXJuVmFsdWUg PSBmYWxzZSB9LAogICAgICBpbnNwZWN0OiBmdW5jdGlvbigpIHsgcmV0dXJuICJb b2JqZWN0IEV2ZW50XSIgfQogICAgfSk7CgogICAgcmV0dXJuIGZ1bmN0aW9uKGV2 ZW50KSB7CiAgICAgIGlmICghZXZlbnQpIHJldHVybiBmYWxzZTsKICAgICAgaWYg KGV2ZW50Ll9leHRlbmRlZEJ5UHJvdG90eXBlKSByZXR1cm4gZXZlbnQ7CgogICAg ICBldmVudC5fZXh0ZW5kZWRCeVByb3RvdHlwZSA9IFByb3RvdHlwZS5lbXB0eUZ1 bmN0aW9uOwogICAgICB2YXIgcG9pbnRlciA9IEV2ZW50LnBvaW50ZXIoZXZlbnQp OwogICAgICBPYmplY3QuZXh0ZW5kKGV2ZW50LCB7CiAgICAgICAgdGFyZ2V0OiBl dmVudC5zcmNFbGVtZW50LAogICAgICAgIHJlbGF0ZWRUYXJnZXQ6IEV2ZW50LnJl bGF0ZWRUYXJnZXQoZXZlbnQpLAogICAgICAgIHBhZ2VYOiAgcG9pbnRlci54LAog ICAgICAgIHBhZ2VZOiAgcG9pbnRlci55CiAgICAgIH0pOwogICAgICByZXR1cm4g T2JqZWN0LmV4dGVuZChldmVudCwgbWV0aG9kcyk7CiAgICB9OwoKICB9IGVsc2Ug ewogICAgRXZlbnQucHJvdG90eXBlID0gRXZlbnQucHJvdG90eXBlIHx8IGRvY3Vt ZW50LmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIilbJ19fcHJvdG9fXyddOwogICAg T2JqZWN0LmV4dGVuZChFdmVudC5wcm90b3R5cGUsIG1ldGhvZHMpOwogICAgcmV0 dXJuIFByb3RvdHlwZS5LOwogIH0KfSkoKTsKCk9iamVjdC5leHRlbmQoRXZlbnQs IChmdW5jdGlvbigpIHsKICB2YXIgY2FjaGUgPSBFdmVudC5jYWNoZTsKCiAgZnVu Y3Rpb24gZ2V0RXZlbnRJRChlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudC5fcHJv dG90eXBlRXZlbnRJRCkgcmV0dXJuIGVsZW1lbnQuX3Byb3RvdHlwZUV2ZW50SURb MF07CiAgICBhcmd1bWVudHMuY2FsbGVlLmlkID0gYXJndW1lbnRzLmNhbGxlZS5p ZCB8fCAxOwogICAgcmV0dXJuIGVsZW1lbnQuX3Byb3RvdHlwZUV2ZW50SUQgPSBb Kythcmd1bWVudHMuY2FsbGVlLmlkXTsKICB9CgogIGZ1bmN0aW9uIGdldERPTUV2 ZW50TmFtZShldmVudE5hbWUpIHsKICAgIGlmIChldmVudE5hbWUgJiYgZXZlbnRO YW1lLmluY2x1ZGUoJzonKSkgcmV0dXJuICJkYXRhYXZhaWxhYmxlIjsKICAgIHJl dHVybiBldmVudE5hbWU7CiAgfQoKICBmdW5jdGlvbiBnZXRDYWNoZUZvcklEKGlk KSB7CiAgICByZXR1cm4gY2FjaGVbaWRdID0gY2FjaGVbaWRdIHx8IHsgfTsKICB9 CgogIGZ1bmN0aW9uIGdldFdyYXBwZXJzRm9yRXZlbnROYW1lKGlkLCBldmVudE5h bWUpIHsKICAgIHZhciBjID0gZ2V0Q2FjaGVGb3JJRChpZCk7CiAgICByZXR1cm4g Y1tldmVudE5hbWVdID0gY1tldmVudE5hbWVdIHx8IFtdOwogIH0KCiAgZnVuY3Rp b24gY3JlYXRlV3JhcHBlcihlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpIHsK ICAgIHZhciBpZCA9IGdldEV2ZW50SUQoZWxlbWVudCk7CiAgICB2YXIgYyA9IGdl dFdyYXBwZXJzRm9yRXZlbnROYW1lKGlkLCBldmVudE5hbWUpOwogICAgaWYgKGMu cGx1Y2soImhhbmRsZXIiKS5pbmNsdWRlKGhhbmRsZXIpKSByZXR1cm4gZmFsc2U7 CgogICAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbihldmVudCkgewogICAgICBpZiAo IUV2ZW50IHx8ICFFdmVudC5leHRlbmQgfHwKICAgICAgICAoZXZlbnQuZXZlbnRO YW1lICYmIGV2ZW50LmV2ZW50TmFtZSAhPSBldmVudE5hbWUpKQogICAgICAgICAg cmV0dXJuIGZhbHNlOwoKICAgICAgRXZlbnQuZXh0ZW5kKGV2ZW50KTsKICAgICAg aGFuZGxlci5jYWxsKGVsZW1lbnQsIGV2ZW50KTsKICAgIH07CgogICAgd3JhcHBl ci5oYW5kbGVyID0gaGFuZGxlcjsKICAgIGMucHVzaCh3cmFwcGVyKTsKICAgIHJl dHVybiB3cmFwcGVyOwogIH0KCiAgZnVuY3Rpb24gZmluZFdyYXBwZXIoaWQsIGV2 ZW50TmFtZSwgaGFuZGxlcikgewogICAgdmFyIGMgPSBnZXRXcmFwcGVyc0ZvckV2 ZW50TmFtZShpZCwgZXZlbnROYW1lKTsKICAgIHJldHVybiBjLmZpbmQoZnVuY3Rp b24od3JhcHBlcikgeyByZXR1cm4gd3JhcHBlci5oYW5kbGVyID09IGhhbmRsZXIg fSk7CiAgfQoKICBmdW5jdGlvbiBkZXN0cm95V3JhcHBlcihpZCwgZXZlbnROYW1l LCBoYW5kbGVyKSB7CiAgICB2YXIgYyA9IGdldENhY2hlRm9ySUQoaWQpOwogICAg aWYgKCFjW2V2ZW50TmFtZV0pIHJldHVybiBmYWxzZTsKICAgIGNbZXZlbnROYW1l XSA9IGNbZXZlbnROYW1lXS53aXRob3V0KGZpbmRXcmFwcGVyKGlkLCBldmVudE5h bWUsIGhhbmRsZXIpKTsKICB9CgogIGZ1bmN0aW9uIGRlc3Ryb3lDYWNoZSgpIHsK ICAgIGZvciAodmFyIGlkIGluIGNhY2hlKQogICAgICBmb3IgKHZhciBldmVudE5h bWUgaW4gY2FjaGVbaWRdKQogICAgICAgIGNhY2hlW2lkXVtldmVudE5hbWVdID0g bnVsbDsKICB9CgoKICAvLyBJbnRlcm5ldCBFeHBsb3JlciBuZWVkcyB0byByZW1v dmUgZXZlbnQgaGFuZGxlcnMgb24gcGFnZSB1bmxvYWQKICAvLyBpbiBvcmRlciB0 byBhdm9pZCBtZW1vcnkgbGVha3MuCiAgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCkg ewogICAgd2luZG93LmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsIGRlc3Ryb3lDYWNo ZSk7CiAgfQoKICAvLyBTYWZhcmkgaGFzIGEgZHVtbXkgZXZlbnQgaGFuZGxlciBv biBwYWdlIHVubG9hZCBzbyB0aGF0IGl0IHdvbid0CiAgLy8gdXNlIGl0cyBiZmNh Y2hlLiBTYWZhcmkgPD0gMy4xIGhhcyBhbiBpc3N1ZSB3aXRoIHJlc3RvcmluZyB0 aGUgImRvY3VtZW50IgogIC8vIG9iamVjdCB3aGVuIHBhZ2UgaXMgcmV0dXJuZWQg dG8gdmlhIHRoZSBiYWNrIGJ1dHRvbiB1c2luZyBpdHMgYmZjYWNoZS4KICBpZiAo UHJvdG90eXBlLkJyb3dzZXIuV2ViS2l0KSB7CiAgICB3aW5kb3cuYWRkRXZlbnRM aXN0ZW5lcigndW5sb2FkJywgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24sIGZhbHNl KTsKICB9CgogIHJldHVybiB7CiAgICBvYnNlcnZlOiBmdW5jdGlvbihlbGVtZW50 LCBldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgICAgZWxlbWVudCA9ICQoZWxlbWVu dCk7CiAgICAgIHZhciBuYW1lID0gZ2V0RE9NRXZlbnROYW1lKGV2ZW50TmFtZSk7 CgogICAgICB2YXIgd3JhcHBlciA9IGNyZWF0ZVdyYXBwZXIoZWxlbWVudCwgZXZl bnROYW1lLCBoYW5kbGVyKTsKICAgICAgaWYgKCF3cmFwcGVyKSByZXR1cm4gZWxl bWVudDsKCiAgICAgIGlmIChlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAg ICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcHBlciwgZmFs c2UpOwogICAgICB9IGVsc2UgewogICAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQo Im9uIiArIG5hbWUsIHdyYXBwZXIpOwogICAgICB9CgogICAgICByZXR1cm4gZWxl bWVudDsKICAgIH0sCgogICAgc3RvcE9ic2VydmluZzogZnVuY3Rpb24oZWxlbWVu dCwgZXZlbnROYW1lLCBoYW5kbGVyKSB7CiAgICAgIGVsZW1lbnQgPSAkKGVsZW1l bnQpOwogICAgICB2YXIgaWQgPSBnZXRFdmVudElEKGVsZW1lbnQpLCBuYW1lID0g Z2V0RE9NRXZlbnROYW1lKGV2ZW50TmFtZSk7CgogICAgICBpZiAoIWhhbmRsZXIg JiYgZXZlbnROYW1lKSB7CiAgICAgICAgZ2V0V3JhcHBlcnNGb3JFdmVudE5hbWUo aWQsIGV2ZW50TmFtZSkuZWFjaChmdW5jdGlvbih3cmFwcGVyKSB7CiAgICAgICAg ICBlbGVtZW50LnN0b3BPYnNlcnZpbmcoZXZlbnROYW1lLCB3cmFwcGVyLmhhbmRs ZXIpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBlbGVtZW50OwoKICAgICAg fSBlbHNlIGlmICghZXZlbnROYW1lKSB7CiAgICAgICAgT2JqZWN0LmtleXMoZ2V0 Q2FjaGVGb3JJRChpZCkpLmVhY2goZnVuY3Rpb24oZXZlbnROYW1lKSB7CiAgICAg ICAgICBlbGVtZW50LnN0b3BPYnNlcnZpbmcoZXZlbnROYW1lKTsKICAgICAgICB9 KTsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgfQoKICAgICAgdmFyIHdy YXBwZXIgPSBmaW5kV3JhcHBlcihpZCwgZXZlbnROYW1lLCBoYW5kbGVyKTsKICAg ICAgaWYgKCF3cmFwcGVyKSByZXR1cm4gZWxlbWVudDsKCiAgICAgIGlmIChlbGVt ZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHsKICAgICAgICBlbGVtZW50LnJlbW92 ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcHBlciwgZmFsc2UpOwogICAgICB9IGVs c2UgewogICAgICAgIGVsZW1lbnQuZGV0YWNoRXZlbnQoIm9uIiArIG5hbWUsIHdy YXBwZXIpOwogICAgICB9CgogICAgICBkZXN0cm95V3JhcHBlcihpZCwgZXZlbnRO YW1lLCBoYW5kbGVyKTsKCiAgICAgIHJldHVybiBlbGVtZW50OwogICAgfSwKCiAg ICBmaXJlOiBmdW5jdGlvbihlbGVtZW50LCBldmVudE5hbWUsIG1lbW8pIHsKICAg ICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICAgIGlmIChlbGVtZW50ID09IGRv Y3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmICFlbGVtZW50LmRpc3Bh dGNoRXZlbnQpCiAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxl bWVudDsKCiAgICAgIHZhciBldmVudDsKICAgICAgaWYgKGRvY3VtZW50LmNyZWF0 ZUV2ZW50KSB7CiAgICAgICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgi SFRNTEV2ZW50cyIpOwogICAgICAgIGV2ZW50LmluaXRFdmVudCgiZGF0YWF2YWls YWJsZSIsIHRydWUsIHRydWUpOwogICAgICB9IGVsc2UgewogICAgICAgIGV2ZW50 ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTsKICAgICAgICBldmVudC5l dmVudFR5cGUgPSAib25kYXRhYXZhaWxhYmxlIjsKICAgICAgfQoKICAgICAgZXZl bnQuZXZlbnROYW1lID0gZXZlbnROYW1lOwogICAgICBldmVudC5tZW1vID0gbWVt byB8fCB7IH07CgogICAgICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHsKICAg ICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAgICB9IGVsc2Ug ewogICAgICAgIGVsZW1lbnQuZmlyZUV2ZW50KGV2ZW50LmV2ZW50VHlwZSwgZXZl bnQpOwogICAgICB9CgogICAgICByZXR1cm4gRXZlbnQuZXh0ZW5kKGV2ZW50KTsK ICAgIH0KICB9Owp9KSgpKTsKCk9iamVjdC5leHRlbmQoRXZlbnQsIEV2ZW50Lk1l dGhvZHMpOwoKRWxlbWVudC5hZGRNZXRob2RzKHsKICBmaXJlOiAgICAgICAgICBF dmVudC5maXJlLAogIG9ic2VydmU6ICAgICAgIEV2ZW50Lm9ic2VydmUsCiAgc3Rv cE9ic2VydmluZzogRXZlbnQuc3RvcE9ic2VydmluZwp9KTsKCk9iamVjdC5leHRl bmQoZG9jdW1lbnQsIHsKICBmaXJlOiAgICAgICAgICBFbGVtZW50Lk1ldGhvZHMu ZmlyZS5tZXRob2RpemUoKSwKICBvYnNlcnZlOiAgICAgICBFbGVtZW50Lk1ldGhv ZHMub2JzZXJ2ZS5tZXRob2RpemUoKSwKICBzdG9wT2JzZXJ2aW5nOiBFbGVtZW50 Lk1ldGhvZHMuc3RvcE9ic2VydmluZy5tZXRob2RpemUoKSwKICBsb2FkZWQ6ICAg ICAgICBmYWxzZQp9KTsKCihmdW5jdGlvbigpIHsKICAvKiBTdXBwb3J0IGZvciB0 aGUgRE9NQ29udGVudExvYWRlZCBldmVudCBpcyBiYXNlZCBvbiB3b3JrIGJ5IERh biBXZWJiLAogICAgIE1hdHRoaWFzIE1pbGxlciwgRGVhbiBFZHdhcmRzIGFuZCBK b2huIFJlc2lnLiAqLwoKICB2YXIgdGltZXI7CgogIGZ1bmN0aW9uIGZpcmVDb250 ZW50TG9hZGVkRXZlbnQoKSB7CiAgICBpZiAoZG9jdW1lbnQubG9hZGVkKSByZXR1 cm47CiAgICBpZiAodGltZXIpIHdpbmRvdy5jbGVhckludGVydmFsKHRpbWVyKTsK ICAgIGRvY3VtZW50LmZpcmUoImRvbTpsb2FkZWQiKTsKICAgIGRvY3VtZW50Lmxv YWRlZCA9IHRydWU7CiAgfQoKICBpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5l cikgewogICAgaWYgKFByb3RvdHlwZS5Ccm93c2VyLldlYktpdCkgewogICAgICB0 aW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICBp ZiAoL2xvYWRlZHxjb21wbGV0ZS8udGVzdChkb2N1bWVudC5yZWFkeVN0YXRlKSkK ICAgICAgICAgIGZpcmVDb250ZW50TG9hZGVkRXZlbnQoKTsKICAgICAgfSwgMCk7 CgogICAgICBFdmVudC5vYnNlcnZlKHdpbmRvdywgImxvYWQiLCBmaXJlQ29udGVu dExvYWRlZEV2ZW50KTsKCiAgICB9IGVsc2UgewogICAgICBkb2N1bWVudC5hZGRF dmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwKICAgICAgICBmaXJlQ29u dGVudExvYWRlZEV2ZW50LCBmYWxzZSk7CiAgICB9CgogIH0gZWxzZSB7CiAgICBk b2N1bWVudC53cml0ZSgiPHNjcmlwdCBpZD1fX29uRE9NQ29udGVudExvYWRlZCBk ZWZlciBzcmM9Ly86PjxcL3NjcmlwdD4iKTsKICAgICQoIl9fb25ET01Db250ZW50 TG9hZGVkIikub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAg IGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gImNvbXBsZXRlIikgewogICAgICAgIHRo aXMub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKICAgICAgICBmaXJlQ29udGVu dExvYWRlZEV2ZW50KCk7CiAgICAgIH0KICAgIH07CiAgfQp9KSgpOwovKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gREVQUkVDQVRFRCAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCkhhc2gudG9RdWVyeVN0cmluZyA9IE9i amVjdC50b1F1ZXJ5U3RyaW5nOwoKdmFyIFRvZ2dsZSA9IHsgZGlzcGxheTogRWxl bWVudC50b2dnbGUgfTsKCkVsZW1lbnQuTWV0aG9kcy5jaGlsZE9mID0gRWxlbWVu dC5NZXRob2RzLmRlc2NlbmRhbnRPZjsKCnZhciBJbnNlcnRpb24gPSB7CiAgQmVm b3JlOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7CiAgICByZXR1cm4gRWxl bWVudC5pbnNlcnQoZWxlbWVudCwge2JlZm9yZTpjb250ZW50fSk7CiAgfSwKCiAg VG9wOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7CiAgICByZXR1cm4gRWxl bWVudC5pbnNlcnQoZWxlbWVudCwge3RvcDpjb250ZW50fSk7CiAgfSwKCiAgQm90 dG9tOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7CiAgICByZXR1cm4gRWxl bWVudC5pbnNlcnQoZWxlbWVudCwge2JvdHRvbTpjb250ZW50fSk7CiAgfSwKCiAg QWZ0ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKICAgIHJldHVybiBF bGVtZW50Lmluc2VydChlbGVtZW50LCB7YWZ0ZXI6Y29udGVudH0pOwogIH0KfTsK CnZhciAkY29udGludWUgPSBuZXcgRXJyb3IoJyJ0aHJvdyAkY29udGludWUiIGlz IGRlcHJlY2F0ZWQsIHVzZSAicmV0dXJuIiBpbnN0ZWFkJyk7CgovLyBUaGlzIHNo b3VsZCBiZSBtb3ZlZCB0byBzY3JpcHQuYWN1bG8udXM7IG5vdGljZSB0aGUgZGVw cmVjYXRlZCBtZXRob2RzCi8vIGZ1cnRoZXIgYmVsb3csIHRoYXQgbWFwIHRvIHRo ZSBuZXdlciBFbGVtZW50IG1ldGhvZHMuCnZhciBQb3NpdGlvbiA9IHsKICAvLyBz ZXQgdG8gdHJ1ZSBpZiBuZWVkZWQsIHdhcm5pbmc6IGZpcmVmb3ggcGVyZm9ybWFu Y2UgcHJvYmxlbXMKICAvLyBOT1QgbmVlZWRlZCBmb3IgcGFnZSBzY3JvbGxpbmcs IG9ubHkgaWYgZHJhZ2dhYmxlIGNvbnRhaW5lZCBpbgogIC8vIHNjcm9sbGFibGUg ZWxlbWVudHMKICBpbmNsdWRlU2Nyb2xsT2Zmc2V0czogZmFsc2UsCgogIC8vIG11 c3QgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIHdpdGhpbkluY2x1ZGluZ1Njcm9s bG9mZnNldCwgZXZlcnkgdGltZSB0aGUKICAvLyBwYWdlIGlzIHNjcm9sbGVkCiAg cHJlcGFyZTogZnVuY3Rpb24oKSB7CiAgICB0aGlzLmRlbHRhWCA9ICB3aW5kb3cu cGFnZVhPZmZzZXQKICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50LmRvY3VtZW50 RWxlbWVudC5zY3JvbGxMZWZ0CiAgICAgICAgICAgICAgICB8fCBkb2N1bWVudC5i b2R5LnNjcm9sbExlZnQKICAgICAgICAgICAgICAgIHx8IDA7CiAgICB0aGlzLmRl bHRhWSA9ICB3aW5kb3cucGFnZVlPZmZzZXQKICAgICAgICAgICAgICAgIHx8IGRv Y3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AKICAgICAgICAgICAgICAg IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wCiAgICAgICAgICAgICAgICB8fCAw OwogIH0sCgogIC8vIGNhY2hlcyB4L3kgY29vcmRpbmF0ZSBwYWlyIHRvIHVzZSB3 aXRoIG92ZXJsYXAKICB3aXRoaW46IGZ1bmN0aW9uKGVsZW1lbnQsIHgsIHkpIHsK ICAgIGlmICh0aGlzLmluY2x1ZGVTY3JvbGxPZmZzZXRzKQogICAgICByZXR1cm4g dGhpcy53aXRoaW5JbmNsdWRpbmdTY3JvbGxvZmZzZXRzKGVsZW1lbnQsIHgsIHkp OwogICAgdGhpcy54Y29tcCA9IHg7CiAgICB0aGlzLnljb21wID0geTsKICAgIHRo aXMub2Zmc2V0ID0gRWxlbWVudC5jdW11bGF0aXZlT2Zmc2V0KGVsZW1lbnQpOwoK ICAgIHJldHVybiAoeSA+PSB0aGlzLm9mZnNldFsxXSAmJgogICAgICAgICAgICB5 IDwgIHRoaXMub2Zmc2V0WzFdICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgJiYKICAg ICAgICAgICAgeCA+PSB0aGlzLm9mZnNldFswXSAmJgogICAgICAgICAgICB4IDwg IHRoaXMub2Zmc2V0WzBdICsgZWxlbWVudC5vZmZzZXRXaWR0aCk7CiAgfSwKCiAg d2l0aGluSW5jbHVkaW5nU2Nyb2xsb2Zmc2V0czogZnVuY3Rpb24oZWxlbWVudCwg eCwgeSkgewogICAgdmFyIG9mZnNldGNhY2hlID0gRWxlbWVudC5jdW11bGF0aXZl U2Nyb2xsT2Zmc2V0KGVsZW1lbnQpOwoKICAgIHRoaXMueGNvbXAgPSB4ICsgb2Zm c2V0Y2FjaGVbMF0gLSB0aGlzLmRlbHRhWDsKICAgIHRoaXMueWNvbXAgPSB5ICsg b2Zmc2V0Y2FjaGVbMV0gLSB0aGlzLmRlbHRhWTsKICAgIHRoaXMub2Zmc2V0ID0g RWxlbWVudC5jdW11bGF0aXZlT2Zmc2V0KGVsZW1lbnQpOwoKICAgIHJldHVybiAo dGhpcy55Y29tcCA+PSB0aGlzLm9mZnNldFsxXSAmJgogICAgICAgICAgICB0aGlz Lnljb21wIDwgIHRoaXMub2Zmc2V0WzFdICsgZWxlbWVudC5vZmZzZXRIZWlnaHQg JiYKICAgICAgICAgICAgdGhpcy54Y29tcCA+PSB0aGlzLm9mZnNldFswXSAmJgog ICAgICAgICAgICB0aGlzLnhjb21wIDwgIHRoaXMub2Zmc2V0WzBdICsgZWxlbWVu dC5vZmZzZXRXaWR0aCk7CiAgfSwKCiAgLy8gd2l0aGluIG11c3QgYmUgY2FsbGVk IGRpcmVjdGx5IGJlZm9yZQogIG92ZXJsYXA6IGZ1bmN0aW9uKG1vZGUsIGVsZW1l bnQpIHsKICAgIGlmICghbW9kZSkgcmV0dXJuIDA7CiAgICBpZiAobW9kZSA9PSAn dmVydGljYWwnKQogICAgICByZXR1cm4gKCh0aGlzLm9mZnNldFsxXSArIGVsZW1l bnQub2Zmc2V0SGVpZ2h0KSAtIHRoaXMueWNvbXApIC8KICAgICAgICBlbGVtZW50 Lm9mZnNldEhlaWdodDsKICAgIGlmIChtb2RlID09ICdob3Jpem9udGFsJykKICAg ICAgcmV0dXJuICgodGhpcy5vZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNldFdpZHRo KSAtIHRoaXMueGNvbXApIC8KICAgICAgICBlbGVtZW50Lm9mZnNldFdpZHRoOwog IH0sCgogIC8vIERlcHJlY2F0aW9uIGxheWVyIC0tIHVzZSBuZXdlciBFbGVtZW50 IG1ldGhvZHMgbm93ICgxLjUuMikuCgogIGN1bXVsYXRpdmVPZmZzZXQ6IEVsZW1l bnQuTWV0aG9kcy5jdW11bGF0aXZlT2Zmc2V0LAoKICBwb3NpdGlvbmVkT2Zmc2V0 OiBFbGVtZW50Lk1ldGhvZHMucG9zaXRpb25lZE9mZnNldCwKCiAgYWJzb2x1dGl6 ZTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgUG9zaXRpb24ucHJlcGFyZSgpOwog ICAgcmV0dXJuIEVsZW1lbnQuYWJzb2x1dGl6ZShlbGVtZW50KTsKICB9LAoKICBy ZWxhdGl2aXplOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBQb3NpdGlvbi5wcmVw YXJlKCk7CiAgICByZXR1cm4gRWxlbWVudC5yZWxhdGl2aXplKGVsZW1lbnQpOwog IH0sCgogIHJlYWxPZmZzZXQ6IEVsZW1lbnQuTWV0aG9kcy5jdW11bGF0aXZlU2Ny b2xsT2Zmc2V0LAoKICBvZmZzZXRQYXJlbnQ6IEVsZW1lbnQuTWV0aG9kcy5nZXRP ZmZzZXRQYXJlbnQsCgogIHBhZ2U6IEVsZW1lbnQuTWV0aG9kcy52aWV3cG9ydE9m ZnNldCwKCiAgY2xvbmU6IGZ1bmN0aW9uKHNvdXJjZSwgdGFyZ2V0LCBvcHRpb25z KSB7CiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7IH07CiAgICByZXR1cm4gRWxl bWVudC5jbG9uZVBvc2l0aW9uKHRhcmdldCwgc291cmNlLCBvcHRpb25zKTsKICB9 Cn07CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCmlmICghZG9jdW1l bnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSkgZG9jdW1lbnQuZ2V0RWxlbWVudHNC eUNsYXNzTmFtZSA9IGZ1bmN0aW9uKGluc3RhbmNlTWV0aG9kcyl7CiAgZnVuY3Rp b24gaXRlcihuYW1lKSB7CiAgICByZXR1cm4gbmFtZS5ibGFuaygpID8gbnVsbCA6 ICJbY29udGFpbnMoY29uY2F0KCcgJywgQGNsYXNzLCAnICcpLCAnICIgKyBuYW1l ICsgIiAnKV0iOwogIH0KCiAgaW5zdGFuY2VNZXRob2RzLmdldEVsZW1lbnRzQnlD bGFzc05hbWUgPSBQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLlhQYXRoID8KICBm dW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsKICAgIGNsYXNzTmFtZSA9IGNs YXNzTmFtZS50b1N0cmluZygpLnN0cmlwKCk7CiAgICB2YXIgY29uZCA9IC9ccy8u dGVzdChjbGFzc05hbWUpID8gJHcoY2xhc3NOYW1lKS5tYXAoaXRlcikuam9pbign JykgOiBpdGVyKGNsYXNzTmFtZSk7CiAgICByZXR1cm4gY29uZCA/IGRvY3VtZW50 Ll9nZXRFbGVtZW50c0J5WFBhdGgoJy4vLyonICsgY29uZCwgZWxlbWVudCkgOiBb XTsKICB9IDogZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7CiAgICBjbGFz c05hbWUgPSBjbGFzc05hbWUudG9TdHJpbmcoKS5zdHJpcCgpOwogICAgdmFyIGVs ZW1lbnRzID0gW10sIGNsYXNzTmFtZXMgPSAoL1xzLy50ZXN0KGNsYXNzTmFtZSkg PyAkdyhjbGFzc05hbWUpIDogbnVsbCk7CiAgICBpZiAoIWNsYXNzTmFtZXMgJiYg IWNsYXNzTmFtZSkgcmV0dXJuIGVsZW1lbnRzOwoKICAgIHZhciBub2RlcyA9ICQo ZWxlbWVudCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTsKICAgIGNsYXNzTmFt ZSA9ICcgJyArIGNsYXNzTmFtZSArICcgJzsKCiAgICBmb3IgKHZhciBpID0gMCwg Y2hpbGQsIGNuOyBjaGlsZCA9IG5vZGVzW2ldOyBpKyspIHsKICAgICAgaWYgKGNo aWxkLmNsYXNzTmFtZSAmJiAoY24gPSAnICcgKyBjaGlsZC5jbGFzc05hbWUgKyAn ICcpICYmIChjbi5pbmNsdWRlKGNsYXNzTmFtZSkgfHwKICAgICAgICAgIChjbGFz c05hbWVzICYmIGNsYXNzTmFtZXMuYWxsKGZ1bmN0aW9uKG5hbWUpIHsKICAgICAg ICAgICAgcmV0dXJuICFuYW1lLnRvU3RyaW5nKCkuYmxhbmsoKSAmJiBjbi5pbmNs dWRlKCcgJyArIG5hbWUgKyAnICcpOwogICAgICAgICAgfSkpKSkKICAgICAgICBl bGVtZW50cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGNoaWxkKSk7CiAgICB9CiAgICBy ZXR1cm4gZWxlbWVudHM7CiAgfTsKCiAgcmV0dXJuIGZ1bmN0aW9uKGNsYXNzTmFt ZSwgcGFyZW50RWxlbWVudCkgewogICAgcmV0dXJuICQocGFyZW50RWxlbWVudCB8 fCBkb2N1bWVudC5ib2R5KS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFt ZSk7CiAgfTsKfShFbGVtZW50Lk1ldGhvZHMpOwoKLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSovCgpFbGVtZW50LkNsYXNzTmFtZXMgPSBDbGFzcy5jcmVhdGUo KTsKRWxlbWVudC5DbGFzc05hbWVzLnByb3RvdHlwZSA9IHsKICBpbml0aWFsaXpl OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB0aGlzLmVsZW1lbnQgPSAkKGVsZW1l bnQpOwogIH0sCgogIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgdGhp cy5lbGVtZW50LmNsYXNzTmFtZS5zcGxpdCgvXHMrLykuc2VsZWN0KGZ1bmN0aW9u KG5hbWUpIHsKICAgICAgcmV0dXJuIG5hbWUubGVuZ3RoID4gMDsKICAgIH0pLl9l YWNoKGl0ZXJhdG9yKTsKICB9LAoKICBzZXQ6IGZ1bmN0aW9uKGNsYXNzTmFtZSkg ewogICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKICB9LAoK ICBhZGQ6IGZ1bmN0aW9uKGNsYXNzTmFtZVRvQWRkKSB7CiAgICBpZiAodGhpcy5p bmNsdWRlKGNsYXNzTmFtZVRvQWRkKSkgcmV0dXJuOwogICAgdGhpcy5zZXQoJEEo dGhpcykuY29uY2F0KGNsYXNzTmFtZVRvQWRkKS5qb2luKCcgJykpOwogIH0sCgog IHJlbW92ZTogZnVuY3Rpb24oY2xhc3NOYW1lVG9SZW1vdmUpIHsKICAgIGlmICgh dGhpcy5pbmNsdWRlKGNsYXNzTmFtZVRvUmVtb3ZlKSkgcmV0dXJuOwogICAgdGhp cy5zZXQoJEEodGhpcykud2l0aG91dChjbGFzc05hbWVUb1JlbW92ZSkuam9pbign ICcpKTsKICB9LAoKICB0b1N0cmluZzogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4g JEEodGhpcykuam9pbignICcpOwogIH0KfTsKCk9iamVjdC5leHRlbmQoRWxlbWVu dC5DbGFzc05hbWVzLnByb3RvdHlwZSwgRW51bWVyYWJsZSk7CgovKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi8KCkVsZW1lbnQuYWRkTWV0aG9kcygpOw== ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=tabs.js Content-Type: application/javascript; charset=UTF-8; name=tabs.js Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/tabs.js Content-Transfer-Encoding: Base64 LyoqDQoqQHBhY2thZ2UgRW52aXNpb05leHQgamF2YXNjcmlwdCBsaWJyYXJ5DQoq QHN1YnBhY2thZ2UgVGFicw0KKkBjb3B5cmlnaHQgKEMpIDIwMDcgRW52aXNpb05l eHQuY29tICA8c3VwcG9ydEBFbnZpc2lvTmV4dC5jb20+DQoqQGF1dGhvciBBbnRv biBaYXZpZG92IDxhbnRvbi56YXZpZG92QGVudmlzaW9uZXh0LmNvbS51YT4NCiov DQovL3ZhciBUYWJzID0gbmV3IE9iamVjdCgpOw0KdmFyIFRhYnMgPSB7DQoJDQoJ Ly8gSW5pdA0KCWluaXQgOiBmdW5jdGlvbigpew0KCQkvL3JldHVybjsNCgkJT2Jq ZWN0LmV4dGVuZCh0aGlzLCBUYWJzKTsNCgkJdmFyIHRhYnMgPSAkJCgiZGl2LnRh YnMiKTsNCgkJZm9yICh2YXIgaT0wOyBpPHRhYnMubGVuZ3RoOyBpKyspIHsNCgkJ CW5ldyBJbnNlcnRpb24uQm90dG9tKHRhYnNbaV0sIjxkaXYgY2xhc3M9J3RhYl9j b250ZW50Jz48L2Rpdj4iKTsNCgkJCWlmICh0YWJzW2ldLmdldEVsZW1lbnRzQnlU YWdOYW1lKCdkbCcpLmxlbmd0aD09MCl7ICAgDQoJCQkJcmVmcmVzaFNjZW5lcygp Ow0KCQkJfQ0KCQkJZWxzZXsNCgkJCQl2YXIgZGwgPSB0YWJzW2ldLmdldEVsZW1l bnRzQnlUYWdOYW1lKCdkbCcpWzBdOw0KCQkJCXZhciBkdCA9IGRsLmdldEVsZW1l bnRzQnlUYWdOYW1lKCdkdCcpOw0KCQkJCXZhciBkZCA9IGRsLmdldEVsZW1lbnRz QnlUYWdOYW1lKCdkZCcpOw0KCQkJCWZvciAodmFyIGQ9MDsgZDxkZC5sZW5ndGg7 IGQrKykgew0KCQkJCQl2YXIgdWwgPSBkZFtkXS5nZXRFbGVtZW50c0J5VGFnTmFt ZSgndWwnKVswXTsNCgkJCQkJaWYgKHVsID09IHVuZGVmaW5lZCkgew0KCQkJCQkJ ZHRbZF0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsNCgkJCQkJfSBlbHNlIHsNCgkJ CQkJCQlFdmVudC5vYnNlcnZlKGR0W2RdLCAnY2xpY2snLCB0aGlzLnNob3cuYmlu ZEFzRXZlbnRMaXN0ZW5lcih0aGlzKSk7DQoJCQkJCX0NCgkJCQl9IA0KCQkJfQ0K CQl9DQoJCXZhciB0YWJzID0gJCQoImRpdi50YWJzIGR0Iik7DQoJCXdpbmRvdy5k ZWZUYWJJZCA9IGdldFNldHRpbmdzKCJ0YWJzIik7DQoJCXdpbmRvdy5kZWZUYWJJ ZCA9ICh3aW5kb3cuZGVmVGFiSWQgIT0gbnVsbCAmJiB3aW5kb3cuZGVmVGFiSWQg IT0gInVuZGVmaW5lZCIpP3dpbmRvdy5kZWZUYWJJZDp3aW5kb3cuc3RhcnRGb3Jt YXQ7DQoJCQ0KCQlmb3IodmFyIHM9MDsgczx0YWJzLmxlbmd0aDsgcysrKXsNCgkJ CXRhYnNbc10ubnVtID0gdGFic1tzXS5nZXRBdHRyaWJ1dGUoJ2lkJyk7DQoJCQlp Zih0YWJzW3NdLm51bSA9PSB3aW5kb3cuZGVmVGFiSWQpew0KCQkJCWFjdGl2ZSA9 IHRhYnNbc107DQoJCQl9DQoJCX0NCgkJaWYgKHR5cGVvZiBhY3RpdmUgPT0gInVu ZGVmaW5lZCIgKSB7DQoJCQlhY3RpdmUgPSB0YWJzWzBdOw0KCQl9DQoJCWlmKGFj dGl2ZSA9PSAidW5kZWZpbmVkIil7DQoJCQlhY3RpdmUgPSB0YWJzWydmbHYnXTsN CgkJfQ0KCQkNCgkNCgkJd2luZG93LmRlZiA9IGZhbHNlOw0KCQl0cnl7DQoJCQl2 YXIgY2xhcyA9IGFjdGl2ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgicCIpWzBdLmNs YXNzTmFtZSB8fCBhY3RpdmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNwYW4iKVsw XS5jbGFzc05hbWUgOw0KCQkJd2luZG93LmRlZiA9IGNsYXM7DQoJCX1jYXRjaChl KXt9DQoJCXRyeXt0aGlzLnNob3coYWN0aXZlKTt9Y2F0Y2goZSl7fTsNCgl9LA0K CQ0KCS8vIFNob3cgdGFicw0KCXNob3cgOiBmdW5jdGlvbihlbHMpew0KCQlpZih0 eXBlb2YgZWxzLnRhZ05hbWUgPT0gInN0cmluZyIpew0KCQkJdmFyIGVsID0gZWxz Ow0KCQl9IGVsc2Ugew0KCQkJdmFyIGVsID0gRXZlbnQuZWxlbWVudChlbHMpOw0K CQkJaWYoZWwudGFnTmFtZSE9IkRUIil7DQoJCQkJZWwgPSBlbC5wYXJlbnROb2Rl Ow0KCQkJCWlmKGVsLnRhZ05hbWUhPSJEVCIpew0KCQkJCQllbCA9IGVsLnBhcmVu dE5vZGU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXZhciBkdHQgPSAkJCgiZHQuYWN0 aXZlIik7DQoJCXRyeXsNCgkJCWZvcih2YXIgcj0wOyByPGR0dC5sZW5ndGg7IHIr Kyl7DQoJCQlpZihkdHRbcl0hPWVsKXsNCgkJCQlpZihkdHRbcl0uY2xhc3NOYW1l ID09ICJhY3RpdmUiKSB7DQoJCQkJCWlmKG5hdmlnYXRvci5hcHBOYW1lICE9ICJN aWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIiKSB7DQoJCQkJCQlkdHRbcl0ucmVt b3ZlQXR0cmlidXRlKCdjbGFzcycpOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQlkdHRb cl0uY2xhc3NOYW1lID0gJyc7DQoJCQkJCX0JCQkNCgkJCQl9IGVsc2Ugew0KCQkJ CQlkdHRbcl0uY2xhc3NOYW1lID0gZHR0W3JdLmNsYXNzTmFtZS5zcGxpdCgiICIp WzFdOw0KCQkJCX0NCgkJCX0NCgkJCX0NCgkJfSBjYXRjaChlKXt9DQoJCWlmIChl bC5jbGFzc05hbWUgPT0gImxpbmsiKSB7DQoJCQlpZihlbC5jbGFzc05hbWUubGVu Z3RoPDApIHsNCgkJCQllbC5jbGFzc05hbWUgPSAiYWN0aXZlIjsNCgkJCX0gZWxz ZSB7DQoJCQkJZWwuY2xhc3NOYW1lID0gImFjdGl2ZSAiICsgZWwuY2xhc3NOYW1l Ow0KCQkJfQ0KCQkJcmV0dXJuOw0KCQl9DQoJCWlmKGVsLmNsYXNzTmFtZS5sZW5n dGg8MCkgew0KCQkJCWVsLmNsYXNzTmFtZSA9ICJhY3RpdmUiOw0KCQkJfSBlbHNl IHsNCgkJCQlpZihlbC5jbGFzc05hbWUhPSJhY3RpdmUiKXsNCgkJCQkJZWwuY2xh c3NOYW1lID0gImFjdGl2ZSAiICsgZWwuY2xhc3NOYW1lOw0KCQkJCX0NCgkJCX0N CgkJZWxlbWVudCA9IGVsOw0KCQl3aW5kb3cuY3VycmVudFRhYiA9IGVsZW1lbnQu aWQ7DQoJCXZhciBvbGRUYWJJZCA9IHdpbmRvdy5kZWZUYWJJZDsNCgkJd2luZG93 LmRlZlRhYklkID0gZWxlbWVudC5pZDsNCgkJd2luZG93LmZvcm1hdCA9IGdldFNl dHRpbmdzKCJTdHJlYW1UYWIiKTsNCgkJDQoJCUV2ZW50Lm9ic2VydmUoJCgnc2Nl bmVfbWVudScpICwgJ21vdXNlZG93bicgLCBmdW5jdGlvbigpIHsNCgkJCXdpbmRv dy5zd2ZvYmplY3RMb2FkZWQgPSBmYWxzZTsNCgkJfSk7DQoJCQ0KCQl0cnl7c2V0 U2V0dGluZ3MoInRhYnMiLGVsLmlkKTt9Y2F0Y2goZSl7fQ0KCQlpZih3aW5kb3cu c3RhcnRUYWIpew0KCQkJaWYgKGVsZW1lbnQuaWQgIT0gJ2hkJyAmJiBvbGRUYWJJ ZCAhPSAnaGQnKSB7DQoJCQkJdHJ5ew0KCQkJCQlpZiAoIXdpbmRvdy50YWJDaGFu Z2UoZWxlbWVudC5pZCkpIHJldHVybjsNCgkJCQl9Y2F0Y2goZSl7fQ0KCQkJfQ0K CQl9DQoJCXdpbmRvdy5zdGFydFRhYj10cnVlOw0KCQkNCgkJcmVmcmVzaFNjZW5l cygpOw0KCQl3aGlsZShlbGVtZW50LnRhZ05hbWUgIT0gIkREIikNCgkJew0KCQkJ ZWxlbWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmc7DQoJCX0NCgkJdmFyIGNvbnRl bnQgPSBlbGVtZW50LmlubmVySFRNTDsNCgkJdmFyIHRhYl9jb250ZW50ID0gZWwu cGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYn KTsNCgkJZm9yKHZhciBpPTA7IGk8dGFiX2NvbnRlbnQubGVuZ3RoOyBpKyspIHsN CgkJCWlmKHRhYl9jb250ZW50W2ldLmNsYXNzTmFtZSA9PSAidGFiX2NvbnRlbnQi KSB7DQoJCQkJdHJ5ew0KCQkJCQl0YWJfY29udGVudFtpXS5pbm5lckhUTUwgPSAi IjsNCgkJCQkJbmV3IEluc2VydGlvbi5Ub3AodGFiX2NvbnRlbnRbaV0sY29udGVu dCk7DQoJCQkJfWNhdGNoKGUpe30NCgkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQkN CgkJDQoJCWlmICh3aW5kb3cuZGVmVGFiSWQgPT0gJ2ZsdicpIHsNCgkJCWlmKHdp bmRvdy5mb3JtYXQgPT0gJ2xvdycpew0KCQkJCWlmKCQkKCcudHlwZV8xNCcpWzBd ICE9IHVuZGVmaW5lZCl7DQoJCQkJCSQkKCcudHlwZV8xNCcpLmVhY2goZnVuY3Rp b24oaXRlbSl7DQoJCQkJCWl0ZW0uYWRkQ2xhc3NOYW1lKCdhY3RpdmVfZm9ybWF0 Jyk7DQoJCQkJICAgfSk7DQoJCQkJICAgICQkKCcudHlwZV82JykuZWFjaChmdW5j dGlvbihpdGVtKXsNCgkJCQkJaXRlbS5yZW1vdmVDbGFzc05hbWUoJ2FjdGl2ZV9m b3JtYXQnKTsNCgkJCQkgICB9KTsNCgkJCQkJICAgaWYod2luZG93LnNjZW5lZm9y bWF0ID09IHVuZGVmaW5lZCkgew0KCQkJCQkJICAgd2luZG93LnNjZW5lZm9ybWF0 ID0gMTQ7DQoJCQkJCQl9ZWxzZXsNCgkJCQkJCSAgIHdpbmRvdy5vbGRGb3JtYXQg PSB3aW5kb3cuc2NlbmVmb3JtYXQ7DQoJCQkJCQl9DQoJCQkJfWVsc2V7DQoJCQkJ CXNldFN0cmVhbVRhYignaGlnaCcpOw0KCQkJCQkkJCgnLnR5cGVfNicpLmVhY2go ZnVuY3Rpb24oaXRlbSl7DQoJCQkJCWl0ZW0uYWRkQ2xhc3NOYW1lKCdhY3RpdmVf Zm9ybWF0Jyk7DQoJCQkJCX0pOw0KCQkJCQkJaWYod2luZG93LnNjZW5lZm9ybWF0 ID09IHVuZGVmaW5lZCkgeyANCgkJCQkJCSAgIHdpbmRvdy5zY2VuZWZvcm1hdCA9 IDY7DQoJCQkJCQl9ZWxzZXsNCgkJCQkJCSAgIHdpbmRvdy5vbGRGb3JtYXQgPSB3 aW5kb3cuc2NlbmVmb3JtYXQ7DQoJCQkJCQl9DQoJCQkJCQ0KCQkJCX0NCgkJCQkN CgkJCX1lbHNlew0KCQkJCSQkKCcudHlwZV82JykuZWFjaChmdW5jdGlvbihpdGVt KXsNCgkJCQkJaXRlbS5hZGRDbGFzc05hbWUoJ2FjdGl2ZV9mb3JtYXQnKTsNCgkJ CQl9KTsNCgkJCQkgICAgaWYod2luZG93LnNjZW5lZm9ybWF0ID09IHVuZGVmaW5l ZCkgeyANCgkJCQkJICAgd2luZG93LnNjZW5lZm9ybWF0ID0gNjsNCgkJCQkJfWVs c2V7DQoJCQkJCSAgIHdpbmRvdy5vbGRGb3JtYXQgPSB3aW5kb3cuc2NlbmVmb3Jt YXQ7DQoJCQkJCX0NCgkJCX0NCgkJCVRhYnMuY2hhbmdlRm9ybWF0KCk7DQoJCSB9 DQoJCQ0KCQlpZih3aW5kb3cuZGVmVGFiSWQgPT0gJ2hkJykgew0KCQkJCWlmKHdp bmRvdy5mb3JtYXQgPT0gJ2xvdycpew0KCQkJCQkkJCgnLnR5cGVfMjEnKS5lYWNo KGZ1bmN0aW9uKGl0ZW0pew0KCQkJCQkJaXRlbS5hZGRDbGFzc05hbWUoJ2FjdGl2 ZV9mb3JtYXQnKTsNCgkJCQkJfSk7DQoJCQkJCWlmKHdpbmRvdy5zY2VuZWZvcm1h dCA9PSB1bmRlZmluZWQpIHsNCgkJCQkJICAgd2luZG93LnNjZW5lZm9ybWF0ID0g MjE7DQoJCQkJCX1lbHNlew0KCQkJCQkgICB3aW5kb3cub2xkRm9ybWF0ID0gd2lu ZG93LnNjZW5lZm9ybWF0Ow0KCQkJCQl9DQoJCQkJfWVsc2V7DQoJCQkJCWlmKCQk KCcudHlwZV8yMicpWzBdID09IHVuZGVmaW5lZCkgew0KCQkJCQkJJCQoJy50eXBl XzIxJykuZWFjaChmdW5jdGlvbihpdGVtKXsNCgkJCQkJCQlpdGVtLmFkZENsYXNz TmFtZSgnYWN0aXZlX2Zvcm1hdCcpOw0KCQkJCQkJfSk7DQoJCQkJCX1lbHNlew0K CQkJCQkJJCQoJy50eXBlXzIyJykuZWFjaChmdW5jdGlvbihpdGVtKXsNCgkJCQkJ CQlpdGVtLmFkZENsYXNzTmFtZSgnYWN0aXZlX2Zvcm1hdCcpOw0KCQkJCQkJfSk7 DQoJCQkJCX0JCQkJCQkJDQoJCQkJCWlmKHdpbmRvdy5zY2VuZWZvcm1hdCA9PSB1 bmRlZmluZWQpIHsgDQoJCQkJCQl3aW5kb3cuc2NlbmVmb3JtYXQgPSAyMjsNCgkJ CQkJfWVsc2V7DQoJCQkJCSAgIHdpbmRvdy5vbGRGb3JtYXQgPSB3aW5kb3cuc2Nl bmVmb3JtYXQ7DQoJCQkJCX0NCgkJCQl9DQoJCQ0KCQkJCSQoJ3NpZGVfcGFuZScp LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7DQoJCQkJJCgnZnJhbWVzJykuc3R5 bGUud2lkdGg9IjkzMnB4IjsNCgkJCQkkKCdmcmFtZXMnKS5zdHlsZS5tYXJnaW5M ZWZ0PSItMjU3cHgiOw0KCQkJCSQoJ2NydW1iJykuc3R5bGUubWFyZ2luTGVmdD0i LTI1N3B4IjsNCgkJCQkkKCdwbGF5ZXJob2xkZXInKS5zZXRTdHlsZSh7IG1hcmdp bkxlZnQ6Jy0yNTlweCcsIHdpZHRoOic5NTlweCcsIGhlaWdodDonNTY4cHgnfSk7 DQoJCQkJJCgnc2NlbmVfbWVudScpLnN0eWxlLndpZHRoID0gIjkzN3B4Ig0KCQkJ CSQoJ2pzX3RodW1ic192aWV3Jykuc3R5bGUubWFyZ2luVG9wID0gJzEwcHgnOw0K CQkJCSQoJ2VuX2ZsYXNoX3ZpZGVvaG9sZGVyJykuc3R5bGUubWFyZ2luTGVmdCA9 ICc1cHgnOw0KCQkJCVRhYnMuY2hhbmdlRm9ybWF0KCk7DQoJCSB9ZWxzZSB7DQoJ CQkJJCgnc2lkZV9wYW5lJykuc3R5bGUubWFyZ2luVG9wPSIiOw0KCQkJCWlmKHdp bmRvdy5kZWZUYWJJZCAhPSAnZmx2Jykgew0KCQkJCQkJJCgncGxheWVyaG9sZGVy Jykuc2V0U3R5bGUoeyBtYXJnaW5MZWZ0OicnLCB3aWR0aDonMHB4JywgaGVpZ2h0 OicwcHgnfSk7DQoJCQkJCQkkKCdlbl9mbGFzaF92aWRlb2hvbGRlcicpLnN0eWxl LmRpc3BsYXkgPSAnbm9uZSc7DQoJCQkJCX1lbHNlIGlmKHdpbmRvdy5kZWZUYWJJ ZCA9PSAnZmx2Jykgew0KCQkJCQkJJCgncGxheWVyaG9sZGVyJykuc2V0U3R5bGUo e21hcmdpbkxlZnQ6Jycsd2lkdGg6JycsaGVpZ2h0OicnfSk7DQoJCQkJCQkkKCdl bl9mbGFzaF92aWRlb2hvbGRlcicpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0K CQkJCQl9DQoJCQkJJCgnZW5fZmxhc2hfdmlkZW9ob2xkZXInKS5zdHlsZS5tYXJn aW5MZWZ0ID0gJyc7DQoJCQkJJCgnanNfdGh1bWJzX3ZpZXcnKS5zdHlsZS5tYXJn aW5Ub3AgPSAnJzsNCgkJCQkkKCdmcmFtZXMnKS5zdHlsZS53aWR0aD0iIjsNCgkJ CQkkKCdmcmFtZXMnKS5zdHlsZS5tYXJnaW5MZWZ0PSIiOw0KCQkJCSQoJ2NydW1i Jykuc3R5bGUubWFyZ2luTGVmdD0iIjsNCgkJCQkkKCdzY2VuZV9tZW51Jykuc3R5 bGUud2lkdGggPSAiIg0KCQkJICAgfQ0KCQ0KCQkJd2luZG93LnNpZGViYXJQb3Np dGlvbiA9ICQoJ2VuX2ZsYXNoX3ZpZGVvaG9sZGVyJykucG9zaXRpb25lZE9mZnNl dCgpLnRvcCArIDYwNTsNCgkJCWlmICh3aW5kb3cuZGVmVGFiSWQgPT0gJ2hkJykg ew0KCQkJCSQoJ3NpZGVfcGFuZScpLnN0eWxlLm1hcmdpblRvcCA9IHdpbmRvdy5z aWRlYmFyUG9zaXRpb24gKyAncHgnOw0KCQkJCSQoJ3NpZGVfcGFuZScpLnN0eWxl LnZpc2liaWxpdHkgPSAidmlzaWJsZSI7DQoJCQkJDQoJCQl9DQoJfSwNCgljaGFu Z2VGb3JtYXQgOiBmdW5jdGlvbigpIHsNCgkJLy9ORVcgTUVUSE9EIEZPUiBWSURF TyBRVUFMSVRZIENIQU5HSU5HIA0KCQl2YXIgZm9ybWF0ID0gZ2V0U2V0dGluZ3Mo InRhYnMiKTsNCgkgICAgdmFyIGZRdWFsaXR5ID0gZ2V0U2V0dGluZ3MoIlN0cmVh bVRhYiIpOw0KCQkNCgkJaWYgKGZvcm1hdCA9PSAnZmx2JyAmJiBmUXVhbGl0eSA9 PSAnbG93JyApIHsNCgkJCSAgdmFyIFFmb3JtYXQgPSAxNDsNCgkJfSBlbHNlIGlm IChmb3JtYXQgPT0gJ2ZsdicgJiYgZlF1YWxpdHkgPT0gJ2hpZ2gnKSB7DQoJCQkg dmFyIFFmb3JtYXQgPSA2Ow0KCQl9IGVsc2UgaWYgKGZvcm1hdCA9PSAnaGQnICYm IGZRdWFsaXR5ID09ICdoaWdoJykgew0KCQkJaWYoJCQoJy50eXBlXzIyJylbMF0g PT0gdW5kZWZpbmVkKSB7DQoJCQkJCXNldFN0cmVhbVRhYignbG93Jyk7CQ0KCQkJ CQl2YXIgUWZvcm1hdCA9IDIxOw0KCQkJfWVsc2V7ICAgICANCgkJCSAgIHZhciBR Zm9ybWF0ID0gMjI7DQoJCQl9DQoJCX0gZWxzZSBpZiAoZm9ybWF0ID09ICdoZCcg JiYgZlF1YWxpdHkgPT0gJ2xvdycpIHsNCgkJCSB2YXIgUWZvcm1hdCA9IDIxOyAN CgkJfQ0KCSANCgkJIGlmKHdpbmRvdy5vbGRGb3JtYXQgIT0gdW5kZWZpbmVkKXsN CgkJIAl2YXIgcHJldkZvcm1hdCA9ICJmb3JtYXQ9IiArIHdpbmRvdy5vbGRGb3Jt YXQ7DQoJCSB9ZWxzZXsNCgkJCXZhciBwcmV2Rm9ybWF0ID0gImZvcm1hdD0iICsg d2luZG93LnByZXZpb3VzRm9ybWF0Ow0KCQkgfQ0KCQkgdmFyIGNoYW5nZWRGb3Jt YXQgID0gImZvcm1hdD0iICsgUWZvcm1hdDsNCgkJIHZhciBmbGFzaF94bWwgPSB3 aW5kb3cuZmxhc2hfeG1sLmdzdWIocHJldkZvcm1hdCwgY2hhbmdlZEZvcm1hdCk7 CQ0KCQkJDQoJCQlpZiAoZmxhc2hfeG1sICE9ICIiKXsgDQoJCQkJd2luZG93LmZs YXNodmFycyA9IHsNCgkJCQkJZW5fZmxhc2hfeG1sOiBmbGFzaF94bWwNCgkJCQl9 Ow0KCQkJfWVsc2V7DQoJCQkJaWYod2luZG93Lm9yaWVudGF0aW9uID09IDEpew0K CQkJCQkgd2luZG93LmZsYXNodmFycyA9IHsNCgkJCQkJCQllbl9mbGFzaF9iYW5u ZXJfaW1nOndpbmRvdy5iYW5uZXJJbWcsDQoJCQkJCQkJZW5fZmxhc2hfYmFubmVy X2xpbms6Ij9pZHg9am9pbiINCgkJCQkJCQl9Ow0KCQkJCX1lbHNlIGlmICh3aW5k b3cub3JpZW50YXRpb24gPT0gMil7DQoJCQkJCXdpbmRvdy5mbGFzaHZhcnMgPSB7 DQoJCQkJCQkJZW5fZmxhc2hfYmFubmVyX2ltZzp3aW5kb3cuYmFubmVySW1nLA0K CQkJCQkJCWVuX2ZsYXNoX2Jhbm5lcl9saW5rOiI/aWR4PWpvaW4iDQoJCQkJCQkJ fTsJCQkJCQkNCgkJCQl9ZWxzZSBpZiAod2luZG93Lm9yaWVudGF0aW9uID09IDMp ew0KCQkJCQl3aW5kb3cuZmxhc2h2YXJzID0gew0KCQkJCQkJCWVuX2ZsYXNoX2Jh bm5lcl9pbWc6d2luZG93LmJhbm5lckltZywNCgkJCQkJCQllbl9mbGFzaF9iYW5u ZXJfbGluazoiP2lkeD1qb2luIg0KCQkJCQkJCX07CQkJCQkJDQoJCQkJfQ0KCQkJ fQ0KCQkJDQoJCQl2YXIgcGFyYW1zID0geyBtZW51OiAiZmFsc2UiLHdtb2RlOiJv cGFxdWUiLCBhbGxvd1NjcmlwdEFjY2VzczoiYWx3YXlzIiwgYWxsb3dGdWxsU2Ny ZWVuOiJ0cnVlIiwgYWxsb3duZXR3b3JraW5nOiJhbGwifTsNCgkJCXZhciBhdHRy aWJ1dGVzID0geyB9Ow0KCQkgICAgd2luZG93LnN3ZlBhdGggPSAnaHR0cDovL2Nk bi1zbWFsbC5jb250ZW50LmFkdWx0Y2VudHJvLmNvbS93ZWIvdG1wbC8xL2ludHJv L3NjZW5lc19wbGF5ZXIuc3dmJzsNCgkJCWlmIChmb3JtYXQgPT0gJ2ZsdicgJiYg d2luZG93LnN3Zm9iamVjdExvYWRlZCAhPSB0cnVlKSB7DQoJCQkJc3dmb2JqZWN0 LmVtYmVkU1dGKHdpbmRvdy5zd2ZQYXRoLCAiZW5fZmxhc2hfdmlkZW9ob2xkZXIi LCAiNjgwIiwgIjU1MyIsICIxMCIsICJleHByZXNzSW5zdGFsbC5zd2YiLCB3aW5k b3cuZmxhc2h2YXJzLCBwYXJhbXMsIGF0dHJpYnV0ZXMpOw0KCQkJCXdpbmRvdy5z d2ZvYmplY3RMb2FkZWQgPSB0cnVlOw0KCQkJfWVsc2UgaWYoZm9ybWF0ID09ICdo ZCcgJiYgd2luZG93LnN3Zm9iamVjdExvYWRlZCAhPSB0cnVlKSB7DQoJCQkJc3dm b2JqZWN0LmVtYmVkU1dGKHdpbmRvdy5zd2ZQYXRoLCAiZW5fZmxhc2hfdmlkZW9o b2xkZXIiLCAiOTUwIiwgIjU2OCIsICIxMCIsICJleHByZXNzSW5zdGFsbC5zd2Yi LCB3aW5kb3cuZmxhc2h2YXJzLCBwYXJhbXMsIGF0dHJpYnV0ZXMpOw0KCQkJCXdp bmRvdy5zd2ZvYmplY3RMb2FkZWQgPSB0cnVlOw0KCQkJfQ0KCS8vUExBWUVSIElO SVQgRk9SIENIQU5HSU5HIFFVQUxJVFkgV0hJVElOIE9ORSBTQ0VORQkJDQoJICAk JCgnLmZvcm1hdCcpLmVhY2goZnVuY3Rpb24oaXRlbSl7DQoJCQkJCQkJCSAgDQoJ CSBFdmVudC5vYnNlcnZlKCBpdGVtICwgJ2NsaWNrJyAsIGZ1bmN0aW9uKGV2ZW50 KXsJIA0KCQkJCSQkKCcuYWN0aXZlX2Zvcm1hdCcpLmVhY2goZnVuY3Rpb24oZWwp ew0KCQkJCQllbC5yZW1vdmVDbGFzc05hbWUoJ2FjdGl2ZV9mb3JtYXQnKTsNCgkJ CQl9KTsJDQoJCQkgICAvL0V2ZW50LmVsZW1lbnQoZXZlbnQpLmFkZENsYXNzTmFt ZSgnYWN0aXZlX2Zvcm1hdCcpOyANCgkJCSAgIHRoaXMuYWRkQ2xhc3NOYW1lKCdh Y3RpdmVfZm9ybWF0Jyk7DQoJCQkJaWYgKGZvcm1hdCA9PSAnZmx2JyAmJiB3aW5k b3cuc3dmb2JqZWN0TG9hZGVkICE9IGZhbHNlKSB7CQkNCgkJCQkJc3dmb2JqZWN0 LmVtYmVkU1dGKHdpbmRvdy5zd2ZQYXRoLCAiZW5fZmxhc2hfdmlkZW9ob2xkZXIi LCAiNjgwIiwgIjU1MyIsICIxMCIsICJleHByZXNzSW5zdGFsbC5zd2YiLCB3aW5k b3cuZmxhc2h2YXJzLCBwYXJhbXMsIGF0dHJpYnV0ZXMpOw0KCQkJCQl3aW5kb3cu c3dmb2JqZWN0TG9hZGVkID0gdHJ1ZTsNCgkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJ ICAgIH1lbHNlIGlmKGZvcm1hdCA9PSAnaGQnICYmIHdpbmRvdy5zd2ZvYmplY3RM b2FkZWQgIT0gZmFsc2UpIHsNCgkJCQkJc3dmb2JqZWN0LmVtYmVkU1dGKHdpbmRv dy5zd2ZQYXRoLCAiZW5fZmxhc2hfdmlkZW9ob2xkZXIiLCAiOTUwIiwgIjU2OCIs ICIxMCIsICJleHByZXNzSW5zdGFsbC5zd2YiLCB3aW5kb3cuZmxhc2h2YXJzLCBw YXJhbXMsIGF0dHJpYnV0ZXMpOw0KCQkJCQl3aW5kb3cuc3dmb2JqZWN0TG9hZGVk ID0gdHJ1ZTsNCgkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJICAgIH0NCgkJCX0pOw0K CQl9KTsNCgl9CQkNCn0NCg0KDQpmdW5jdGlvbiBpbml0UGxheWVyKGZsdm9iaikg ew0KICAgICAgICAvL0ZJUlNUIElOSVQgT0YgQUxMIE5FU1NFQ0NBUlkgVkFSSUFC TEVTIEZPUiBQTEFZRVINCiAgICAgICAgdmFyIGZvcm1hdCA9IGdldFNldHRpbmdz KCJ0YWJzIik7DQogICAgICAgIHZhciBwcmV2aW91c0Zvcm1hdCA9ICB3aW5kb3cu cHJldmlvdXNGb3JtYXQ7DQogICAgICAgIHZhciBmbGFzaF94bWwgPSAgZmx2b2Jq Ow0KCQlpZiAod2luZG93LnByZXZpb3VzRm9ybWF0ID09ICcyMScpew0KICAgICAg ICAgICAgc2V0U3RyZWFtVGFiKCdsb3cnKTsNCiAgICAgICAgfWVsc2UgaWYod2lu ZG93LnByZXZpb3VzRm9ybWF0ID09ICcyMicpIHsNCiAgICAgICAgICAgIHNldFN0 cmVhbVRhYignaGlnaCcpOw0KICAgICAgICB9ZWxzZSBpZih3aW5kb3cucHJldmlv dXNGb3JtYXQgPT0gJzE0Jykgew0KICAgICAgICAgICAgc2V0U3RyZWFtVGFiKCds b3cnKTsNCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgICBzZXRTdHJlYW1UYWIo J2hpZ2gnKTsNCiAgICAgICAgfQ0KCQ0KICAgIGlmIChmbGFzaF94bWwgIT0gIiIp eyANCiAgICAgICAgICAgIHdpbmRvdy5mbGFzaHZhcnMgPSB7DQogICAgICAgICAg ICAgICAgZW5fZmxhc2hfeG1sOiBmbGFzaF94bWwsDQogICAgICAgICAgICAgICAg ZW5fZmxhc2hfYmFubmVyX2ltZzogd2luZG93LmJhbm5lckltZywNCiAgICAgICAg ICAgICAgICBlbl9mbGFzaF9iYW5uZXJfbGluazoiP2lkeD1qb2luIg0KICAgICAg ICAgICAgfTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlew0KICAgICAgICAgICAg d2luZG93LmZsYXNodmFycyA9IHsNCiAgICAgICAgICAgICAgICBlbl9mbGFzaF9i YW5uZXJfaW1nOndpbmRvdy5iYW5uZXJJbWcsDQogICAgICAgICAgICAgICAgZW5f Zmxhc2hfYmFubmVyX2xpbms6Ij9pZHg9am9pbiINCiAgICAgICAgICAgIH07DQog ICAgICAgIH0NCiAgICAgICAgdmFyIHBhcmFtcyA9IHsgbWVudTogImZhbHNlIix3 bW9kZToib3BhcXVlIiwgYWxsb3dTY3JpcHRBY2Nlc3M6ImFsd2F5cyIsIGFsbG93 RnVsbFNjcmVlbjoidHJ1ZSIsIGFsbG93bmV0d29ya2luZzoiYWxsIn07DQogICAg ICAgIHZhciBhdHRyaWJ1dGVzID0geyB9Ow0KICAgICAgICB3aW5kb3cuc3dmUGF0 aCA9ICdodHRwOi8vY2RuLXNtYWxsLmNvbnRlbnQuYWR1bHRjZW50cm8uY29tL3dl Yi90bXBsLzEvaW50cm8vc2NlbmVzX3BsYXllci5zd2YnOw0KICAgICAgICAgICAg aWYgKHdpbmRvdy5zdGFydFF1YWxpdHkgPT0gJzYnIHx8IHdpbmRvdy5zdGFydFF1 YWxpdHkgPT0gJzE0JyApIHsJCQ0KICAgICAgICAgICAgICAgIHN3Zm9iamVjdC5l bWJlZFNXRih3aW5kb3cuc3dmUGF0aCwgImVuX2ZsYXNoX3ZpZGVvaG9sZGVyIiwg IjY4MCIsICI1NTMiLCAiMTAiLCAiZXhwcmVzc0luc3RhbGwuc3dmIiwgd2luZG93 LmZsYXNodmFycywgcGFyYW1zLCBhdHRyaWJ1dGVzKTsNCiAgICAgICAgICAgICAg ICAgICAgd2luZG93LnN3Zm9iamVjdExvYWRlZCA9IHRydWU7DQogICAgICAgICAg ICB9ZWxzZSBpZih3aW5kb3cuc3RhcnRRdWFsaXR5ID09ICcyMScgfHwgd2luZG93 LnN0YXJ0UXVhbGl0eSA9PSAnMjInKSB7DQogICAgICAgICAgICAgICAgc3dmb2Jq ZWN0LmVtYmVkU1dGKHdpbmRvdy5zd2ZQYXRoLCAiZW5fZmxhc2hfdmlkZW9ob2xk ZXIiLCAiOTUwIiwgIjU2OCIsICIxMCIsICJleHByZXNzSW5zdGFsbC5zd2YiLCB3 aW5kb3cuZmxhc2h2YXJzLCBwYXJhbXMsIGF0dHJpYnV0ZXMpOw0KICAgICAgICAg ICAgICAgIHdpbmRvdy5zd2ZvYmplY3RMb2FkZWQgPSB0cnVlOw0KICAgICAgICAg ICAgfQ0KfQkNCg0KDQoNCi8qIGNvZGUgdXBkYXRlIGJ5IEtzZW5peWEgUmVkdW5v dmEgKi8NCmZ1bmN0aW9uIHJlZnJlc2hTY2VuZXMoKXsNCgl2YXIgdmlld1R5cGU9 Z2V0U2V0dGluZ3MoInZpZXd0eXBlIikgfHwgInRodW1ibmFpbCI7CS8vInRodW1i bmFpbCI7ICANCglpZiAoJCgnc2VwYXJhdGVfY2xpcHMnKSl7DQoJCSQoJ3NlcGFy YXRlX2NsaXBzJykuaW1tZWRpYXRlRGVzY2VuZGFudHMoKS5lYWNoKGZ1bmN0aW9u KGl0ZW0pew0KCQkJaWYgKGl0ZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iZGl2 Iil7DQoJCQkJaWYgKGl0ZW0uaGFzQ2xhc3NOYW1lKHZpZXdUeXBlKSkNCgkJCQkJ aXRlbS5zaG93KCk7DQoJCQkJZWxzZQ0KCQkJCQlpdGVtLmhpZGUoKTsJCQ0KCQkJ fQ0KCQl9KTsNCgkJdmFyIHVsQXJycz1uZXcgQXJyYXkoKTsNCgkJdmFyIHJvd3M9 JCgnc2VwYXJhdGVfY2xpcHMnKS5kb3duKCcuJyt2aWV3VHlwZSwwKS5pbW1lZGlh dGVEZXNjZW5kYW50cygnZGl2LmNsZWFyZml4JykubGVuZ3RoOw0KCQlmb3IgKHZh ciBxPTA7IHE8cm93cztxKyspew0KCQkJLy9udW1iZXIgb2YgZGl2cyBjbGFzcz0i aXRlbSIgY29udGFpbmluZyBzY2VuZXMJaW4gdGhpcyByb3cNCgkJCXZhciBudW1T Y2VuZXM9JCgnc2VwYXJhdGVfY2xpcHMnKS5kb3duKCcuJyt2aWV3VHlwZSwwKS5p bW1lZGlhdGVEZXNjZW5kYW50cygnZGl2JylbcV0uaW1tZWRpYXRlRGVzY2VuZGFu dHMoJ2RpdicpLmxlbmd0aDsJDQoJCQlmb3IgKHZhciBrPTA7IGs8bnVtU2NlbmVz OyBrKyspew0KCQkJCS8vZWFjaCBhcnJheSBpdGVtIGNvbnRhaW5zIGFuIGFycmF5 IG9mIHVsIG9iamVjdHMNCgkJCQlpZiAodmlld1R5cGU9PSJ0aHVtYm5haWwiKQ0K CQkJCQl1bEFycnNba109JCgnc2VwYXJhdGVfY2xpcHMnKS5kb3duKCcuJyt2aWV3 VHlwZSwwKS5pbW1lZGlhdGVEZXNjZW5kYW50cygnZGl2JylbcV0uaW1tZWRpYXRl RGVzY2VuZGFudHMoJ2RpdicpW2tdLmRvd24oJy5pbmZvJykuaW1tZWRpYXRlRGVz Y2VuZGFudHMoJ3VsJyk7DQoJCQkJZWxzZQ0KCQkJCQl1bEFycnNba109JCgnc2Vw YXJhdGVfY2xpcHMnKS5kb3duKCcuJyt2aWV3VHlwZSwwKS5pbW1lZGlhdGVEZXNj ZW5kYW50cygnZGl2JylbcV0uaW1tZWRpYXRlRGVzY2VuZGFudHMoJ2RpdicpW2td LmltbWVkaWF0ZURlc2NlbmRhbnRzKCd1bCcpOw0KCQkJfQ0KCQkJZm9yICh2YXIg az0wOyBrPG51bVNjZW5lczsgaysrKXsNCgkJCQlmb3IgKHZhciBpPTA7IGk8dWxB cnJzW2tdLmxlbmd0aDsgaSsrKXsNCgkJCQkJaWYgKHVsQXJyc1trXVtpXS50YWdO YW1lLnRvTG93ZXJDYXNlKCk9PSJ1bCIpewkNCgkJCQkJCWlmKCF1bEFycnNba11b aV0uaGFzQ2xhc3NOYW1lKHdpbmRvdy5jdXJyZW50VGFiKSl7CSAgLy93aW5kb3cu Y3VycmVudFRhYiAtIHRoZSBpZCBvZiBjaG9zZW4gdGFiID0gY2xhc3Mgb2YgZGlz cGxheWVkIHVsDQoJCQkJCQkJdWxBcnJzW2tdW2ldLmhpZGUoKTsNCgkJCQkJCX0N CgkJCQkJCWVsc2V7DQoJCQkJCQkJdWxBcnJzW2tdW2ldLnNob3coKTsNCgkJCQkJ CX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCi8qCWVsc2UNCgkJIGNv bnNvbGUubG9nKCJubyBzZXBhcmF0ZSBjbGlwcyIpOyAqLwkJCQkJCQ0KfQ0KLyog ZW5kIGNvZGUgdXBkYXRlIGJ5IEtzZW5peWEgUmVkdW5vdmEgKi8JDQo= ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=scriptaculous.js Content-Type: application/javascript; charset=UTF-8; name=scriptaculous.js Content-Location: http://cdn-small.content.adultcentro.com//JS/script.aculo.us/scriptaculous.js?load=effects,builder Content-Transfer-Encoding: Base64 Ly8gc2NyaXB0LmFjdWxvLnVzIHNjcmlwdGFjdWxvdXMuanMgdjEuNy4xX2JldGEy LCBTYXQgQXByIDI4IDE1OjIwOjEyIENFU1QgMjAwNwoKLy8gQ29weXJpZ2h0IChj KSAyMDA1LTIwMDcgVGhvbWFzIEZ1Y2hzIChodHRwOi8vc2NyaXB0LmFjdWxvLnVz LCBodHRwOi8vbWlyLmFjdWxvLnVzKQovLyAKLy8gUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nCi8vIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZQovLyAiU29mdHdhcmUiKSwgdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi8v IHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwKLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwg YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi8vIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0bwovLyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 Ci8vIAovLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uIG5vdGljZSBzaGFsbCBiZQovLyBpbmNsdWRlZCBpbiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLy8KLy8g VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsCi8vIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgovLyBNRVJDSEFO VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAov LyBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCi8vIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04KLy8gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi8vIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgov LwovLyBGb3IgZGV0YWlscywgc2VlIHRoZSBzY3JpcHQuYWN1bG8udXMgd2ViIHNp dGU6IGh0dHA6Ly9zY3JpcHQuYWN1bG8udXMvCgp2YXIgU2NyaXB0YWN1bG91cyA9 IHsKICBWZXJzaW9uOiAnMS43LjFfYmV0YTInLAogIHJlcXVpcmU6IGZ1bmN0aW9u KGxpYnJhcnlOYW1lKSB7CiAgICAvLyBpbnNlcnRpbmcgdmlhIERPTSBmYWlscyBp biBTYWZhcmkgMi4wLCBzbyBicnV0ZSBmb3JjZSBhcHByb2FjaAogICAgZG9jdW1l bnQud3JpdGUoJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Iicr bGlicmFyeU5hbWUrJyI+PC9zY3JpcHQ+Jyk7CiAgfSwKICBSRVFVSVJFRF9QUk9U T1RZUEU6ICcxLjUuMScsCiAgbG9hZDogZnVuY3Rpb24oKSB7CiAgICBmdW5jdGlv biBjb252ZXJ0VmVyc2lvblN0cmluZyh2ZXJzaW9uU3RyaW5nKXsKICAgICAgdmFy IHIgPSB2ZXJzaW9uU3RyaW5nLnNwbGl0KCcuJyk7CiAgICAgIHJldHVybiBwYXJz ZUludChyWzBdKSoxMDAwMDAgKyBwYXJzZUludChyWzFdKSoxMDAwICsgcGFyc2VJ bnQoclsyXSk7CiAgICB9CiAKICAgIGlmKCh0eXBlb2YgUHJvdG90eXBlPT0ndW5k ZWZpbmVkJykgfHwgCiAgICAgICAodHlwZW9mIEVsZW1lbnQgPT0gJ3VuZGVmaW5l ZCcpIHx8IAogICAgICAgKHR5cGVvZiBFbGVtZW50Lk1ldGhvZHM9PSd1bmRlZmlu ZWQnKSB8fAogICAgICAgKGNvbnZlcnRWZXJzaW9uU3RyaW5nKFByb3RvdHlwZS5W ZXJzaW9uKSA8IAogICAgICAgIGNvbnZlcnRWZXJzaW9uU3RyaW5nKFNjcmlwdGFj dWxvdXMuUkVRVUlSRURfUFJPVE9UWVBFKSkpCiAgICAgICB0aHJvdygic2NyaXB0 LmFjdWxvLnVzIHJlcXVpcmVzIHRoZSBQcm90b3R5cGUgSmF2YVNjcmlwdCBmcmFt ZXdvcmsgPj0gIiArCiAgICAgICAgU2NyaXB0YWN1bG91cy5SRVFVSVJFRF9QUk9U T1RZUEUpOwogICAgCiAgICAkQShkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt ZSgic2NyaXB0IikpLmZpbmRBbGwoIGZ1bmN0aW9uKHMpIHsKICAgICAgcmV0dXJu IChzLnNyYyAmJiBzLnNyYy5tYXRjaCgvc2NyaXB0YWN1bG91c1wuanMoXD8uKik/ JC8pKQogICAgfSkuZWFjaCggZnVuY3Rpb24ocykgewogICAgICB2YXIgcGF0aCA9 IHMuc3JjLnJlcGxhY2UoL3NjcmlwdGFjdWxvdXNcLmpzKFw/LiopPyQvLCcnKTsK ICAgICAgdmFyIGluY2x1ZGVzID0gcy5zcmMubWF0Y2goL1w/Lipsb2FkPShbYS16 LF0qKS8pOwogICAgICAoaW5jbHVkZXMgPyBpbmNsdWRlc1sxXSA6ICdidWlsZGVy LGVmZmVjdHMsZHJhZ2Ryb3AsY29udHJvbHMsc2xpZGVyLHNvdW5kJykuc3BsaXQo JywnKS5lYWNoKAogICAgICAgZnVuY3Rpb24oaW5jbHVkZSkgeyBTY3JpcHRhY3Vs b3VzLnJlcXVpcmUocGF0aCtpbmNsdWRlKycuanMnKSB9KTsKICAgIH0pOwogIH0K fQoKU2NyaXB0YWN1bG91cy5sb2FkKCk7 ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=event-selectors.js Content-Type: application/javascript; charset=UTF-8; name=event-selectors.js Content-Location: http://cdn-small.content.adultcentro.com/JS/event-selectors/event-selectors.js Content-Transfer-Encoding: Base64 Ly8gRXZlbnRTZWxlY3RvcnMNCi8vIENvcHlyaWdodCAoYykgMjAwNS0yMDA2IEp1 c3RpbiBQYWxtZXIgKGh0dHA6Ly9lbmN5dGVtZWRpYS5jb20pDQovLyBFeGFtcGxl cyBhbmQgZG9jdW1lbnRhdGlvbiAoaHR0cDovL2VuY3l0ZW1lZGlhLmNvbS9ldmVu dC1zZWxlY3RvcnMpDQovLw0KLy8gRXZlbnRTZWxlY3RvcnMgYWxsb3cgeW91IGFj Y2VzcyB0byBKYXZhc2NyaXB0IGV2ZW50cyB1c2luZyBhIENTUyBzdHlsZSBzeW50 YXguDQovLyBJdCBnb2VzIG9uZSBzdGVwIGJleW9uZCBKYXZhc2NyaXB0IGV2ZW50 cyB0byBhbHNvIGdpdmUgeW91IDpsb2FkZWQsIHdoaWNoIGFsbG93cw0KLy8geW91 IHRvIHdhaXQgdW50aWwgYW4gaXRlbSBpcyBsb2FkZWQgaW4gdGhlIGRvY3VtZW50 IGJlZm9yZSB5b3UgYmVnaW4gdG8gaW50ZXJhY3QNCi8vIHdpdGggaXQuDQovLw0K Ly8gSW5zcGlyZWQgYnkgdGhlIHdvcmsgb2YgQmVuIE5vbGFuJ3MgQmVoYXZpb3Vy IChodHRwOi8vYmVubm9sYW4uY29tL2JlaGF2aW91cikNCi8vDQovLyBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcNCi8vIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQ0KLy8gIlNvZnR3YXJl IiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZw0KLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLA0KLy8gZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvDQovLyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8NCi8vIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoNCi8vDQovLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQ0KLy8gaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUgU29mdHdhcmUuDQovLw0KLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsDQovLyBFWFBSRVNT IE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YNCi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EDQovLyBOT05JTkZSSU5HRU1FTlQuIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF DQovLyBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9ODQovLyBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04NCi8vIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KLy8NCg0KLy8gUHJvYmFibHkgd2Fu dCB0byByZW1vdmUgdGhlc2UgYW5kIGNyZWF0ZSB5b3VyIG93bi4NCi8qdmFyIFJ1 bGVzID0gew0KDQogICcjaWNvbnMgYTptb3VzZW92ZXInOiBmdW5jdGlvbihlbGVt ZW50KSB7DQogICAgdmFyIGFwcCA9IGVsZW1lbnQuaWQ7DQogICAgbmV3IEVmZmVj dC5CbGluZERvd24oYXBwICsgJy1jb250ZW50Jywge3F1ZXVlOiAnZW5kJywgZHVy YXRpb246IDAuMn0pOw0KICB9LA0KDQogICcjaWNvbnMgYTptb3VzZW91dCc6IGZ1 bmN0aW9uKGVsZW1lbnQpIHsNCiAgICB2YXIgYXBwID0gZWxlbWVudC5pZDsNCiAg ICBuZXcgRWZmZWN0LkJsaW5kVXAoYXBwICsgJy1jb250ZW50Jywge3F1ZXVlOiAn ZW5kJywgZHVyYXRpb246IDAuMn0pOw0KICB9LA0KDQogICcjZmVhdHVyZXM6bW91 c2VvdmVyJzogZnVuY3Rpb24oZWxlbWVudCkgew0KICAgIC8vYWxlcnQoJ3dlZSBt b3VzZScpOw0KICB9LA0KDQogICcjZmVhdHVyZXMnOiBmdW5jdGlvbihlbGVtZW50 KSB7DQogICAgU29ydGFibGUuY3JlYXRlKGVsZW1lbnQpOw0KICB9LA0KDQogICcj ZmVhdHVyZXMgbGk6Y2xpY2snOiBmdW5jdGlvbihlbGVtZW50LCBldmVudCkgew0K ICAgIG5ldyBBamF4LlVwZGF0ZXIoJ2ZlYXR1cmVzJywgJ2l0ZW0uaHRtbCcsIHsN CiAgICAgIGFzeW5jaHJvbm91czp0cnVlLA0KICAgICAgbWV0aG9kOiAnZ2V0JywN CiAgICAgIGV2YWxTY3JpcHRzOiB0cnVlLA0KICAgICAgaW5zZXJ0aW9uOiBJbnNl cnRpb24uQm90dG9tDQogICAgfSk7DQogIH0NCn0qLw0KDQp2YXIgRXZlbnRTZWxl Y3RvcnMgPSB7DQogIHZlcnNpb246ICcxLjBfcHJlJywNCiAgY2FjaGU6IFtdLA0K DQogIHN0YXJ0OiBmdW5jdGlvbihydWxlcykgew0KICAgIHRoaXMucnVsZXMgPSBy dWxlcyB8fCB7fTsNCiAgICB0aGlzLnRpbWVyID0gbmV3IEFycmF5KCk7DQogICAg dGhpcy5fZXh0ZW5kUnVsZXMoKTsNCiAgICB0aGlzLmFzc2lnbih0aGlzLnJ1bGVz KTsNCiAgfSwNCg0KICBhc3NpZ246IGZ1bmN0aW9uKHJ1bGVzKSB7DQogICAgdmFy IG9ic2VydmVyID0gbnVsbDsNCiAgICB0aGlzLl91bmxvYWRDYWNoZSgpOw0KICAg IHJ1bGVzLl9lYWNoKGZ1bmN0aW9uKHJ1bGUpIHsNCiAgICAgIHZhciBzZWxlY3Rv cnMgPSAkQShydWxlLmtleS5zcGxpdCgnLCcpKTsNCiAgICAgIHNlbGVjdG9ycy5l YWNoKGZ1bmN0aW9uKHNlbGVjdG9yKSB7DQogICAgICAgIHZhciBwYWlyID0gc2Vs ZWN0b3Iuc3BsaXQoJzonKTsNCiAgICAgICAgdmFyIGV2ZW50ID0gcGFpclsxXTsN CiAgICAgICAgJCQocGFpclswXSkuZWFjaChmdW5jdGlvbihlbGVtZW50KSB7DQog ICAgICAgICAgaWYocGFpclsxXSA9PSAnJyB8fCBwYWlyLmxlbmd0aCA9PSAxKSBy ZXR1cm4gcnVsZS52YWx1ZShlbGVtZW50KTsNCiAgICAgICAgICBpZihldmVudC50 b0xvd2VyQ2FzZSgpID09ICdsb2FkZWQnKSB7DQogICAgICAgICAgICB0aGlzLnRp bWVyW3BhaXJbMF1dID0gc2V0SW50ZXJ2YWwodGhpcy5fY2hlY2tMb2FkZWQuYmlu ZCh0aGlzLCBlbGVtZW50LCBwYWlyWzBdLCBydWxlKSwgMTUpOw0KICAgICAgICAg IH0gZWxzZSB7DQogICAgICAgICAgICBvYnNlcnZlciA9IGZ1bmN0aW9uKGV2ZW50 KSB7DQogICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gRXZlbnQuZWxlbWVudChl dmVudCk7DQogICAgICAgICAgICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlID09IDMp IC8vIFNhZmFyaSBCdWcgKEZpeGVkIGluIFdlYmtpdCkNCiAgICAgICAgICAgIAkJ ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTsNCiAgICAgICAgICAgICAgcnVs ZS52YWx1ZSgkKGVsZW1lbnQpLCBldmVudCk7DQogICAgICAgICAgICB9DQogICAg ICAgICAgICB0aGlzLmNhY2hlLnB1c2goW2VsZW1lbnQsIGV2ZW50LCBvYnNlcnZl cl0pOw0KICAgICAgICAgICAgRXZlbnQub2JzZXJ2ZShlbGVtZW50LCBldmVudCwg b2JzZXJ2ZXIpOw0KICAgICAgICAgIH0NCiAgICAgICAgfS5iaW5kKHRoaXMpKTsN CiAgICAgIH0uYmluZCh0aGlzKSk7DQogICAgfS5iaW5kKHRoaXMpKTsNCiAgfSwN Cg0KICAvLyBTY29wZWQgY2FjaGVzIHdvdWxkIHJvY2suDQogIF91bmxvYWRDYWNo ZTogZnVuY3Rpb24oKSB7DQogICAgaWYgKCF0aGlzLmNhY2hlKSByZXR1cm47DQog ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhY2hlLmxlbmd0aDsgaSsrKSB7 DQogICAgICBFdmVudC5zdG9wT2JzZXJ2aW5nLmFwcGx5KHRoaXMsIHRoaXMuY2Fj aGVbaV0pOw0KICAgICAgdGhpcy5jYWNoZVtpXVswXSA9IG51bGw7DQogICAgfQ0K ICAgIHRoaXMuY2FjaGUgPSBbXTsNCiAgfSwNCg0KICBfY2hlY2tMb2FkZWQ6IGZ1 bmN0aW9uKGVsZW1lbnQsIHRpbWVyLCBydWxlKSB7DQogICAgdmFyIG5vZGUgPSAk KGVsZW1lbnQpOw0KICAgIGlmKGVsZW1lbnQudGFnTmFtZSAhPSAndW5kZWZpbmVk Jykgew0KICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyW3RpbWVyXSk7DQog ICAgICBydWxlLnZhbHVlKG5vZGUpOw0KICAgIH0NCiAgfSwNCg0KICBfZXh0ZW5k UnVsZXM6IGZ1bmN0aW9uKCkgew0KICAgIE9iamVjdC5leHRlbmQodGhpcy5ydWxl cywgew0KICAgICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0b3IpIHsNCiAgICAgICBm b3IgKGtleSBpbiB0aGlzKSB7DQogICAgICAgICBpZihrZXkgPT0gJ19lYWNoJykg Y29udGludWU7DQogICAgICAgICB2YXIgdmFsdWUgPSB0aGlzW2tleV07DQogICAg ICAgICB2YXIgcGFpciA9IFtrZXksIHZhbHVlXTsNCiAgICAgICAgIHBhaXIua2V5 ID0ga2V5Ow0KICAgICAgICAgcGFpci52YWx1ZSA9IHZhbHVlOw0KICAgICAgICAg aXRlcmF0b3IocGFpcik7DQogICAgICAgfQ0KICAgICB9DQogICAgfSk7DQogIH0N Cn0NCg0KLy8gUmVtb3ZlL0NvbW1lbnQgdGhpcyBpZiB5b3UgZG8gbm90IHdpc2gg dG8gcmVhcHBseSBSdWxlcyBhdXRvbWF0aWNhbGx5DQovLyBvbiBBamF4IHJlcXVl c3QuDQovKg0KQWpheC5SZXNwb25kZXJzLnJlZ2lzdGVyKHsNCiAgb25Db21wbGV0 ZTogZnVuY3Rpb24oKSB7IEV2ZW50U2VsZWN0b3JzLmFzc2lnbihSdWxlcyk7fQ0K fSkNCiov ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=reviews.js Content-Type: application/javascript; charset=UTF-8; name=reviews.js Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/reviews.js?ver=1 Content-Transfer-Encoding: Base64 LyoNCiAqIA0KICogDQogKi8NCg0KdmFyIG9ialJldmlldzsNCnZhciBSZXZpZXdz ID0gQ2xhc3MuY3JlYXRlKCk7DQp3aW5kb3cuUmV2aWV3cz1SZXZpZXdzOw0Kd2lu ZG93LlJldmlld3MucHJvdG90eXBlID0gew0KCWluaXRpYWxpemU6IGZ1bmN0aW9u KG9wdHMpIHsNCgkJaWYgKHR5cGVvZihvcHRzKSAhPSAnb2JqZWN0Jykgew0KCQkJ cmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJdGhpcy5hcHBTdGF0ZSA9IG9wdHMuYXBw U3RhdGU7CQkNCgkJdGhpcy5sb2FkZWRCb2R5ID0gZmFsc2U7CQkNCgkJdGhpcy5j aWQgPSBvcHRzLmNpZDsNCgkJdGhpcy51aWQgPSBvcHRzLnVpZDsNCgkJdGhpcy50 eXBlID0gb3B0cy51aWQ7DQoJCXRoaXMub25seVVzZXIgPSB0cnVlOyAvLyh0aGlz LnJlZGlyZWN0ID0gb3B0cy5yZWRpcmVjdCkgPyB0cnVlIDogZmFsc2U7DQoJCXRo aXMucmVkaXJlY3QgPSBvcHRzLnJlZGlyZWN0Ow0KCQl0aGlzLm1pbmUgPSBvcHRz Lm1pbmUgPyB0cnVlIDogZmFsc2U7DQoJCXRoaXMucmV2aWV3VHlwZSA9IG9wdHMu cmV2aWV3VHlwZSA/ICgnJlVzZXJSZXZpZXdzX3Jldmlld1R5cGU9JyArIG9wdHMu cmV2aWV3VHlwZSkgOiAnJzsNCgkJdGhpcy5jb3VudCA9IG9wdHMuY291bnQgPyBv cHRzLmNvdW50IDogMDsNCg0KCQlpZiAodHlwZW9mKG9wdHMucGF0dGVybnMpICE9 ICdvYmplY3QnKSB7DQoJCQl0aGlzLnBhdHRlcm5zID0gew0KCQkJCXNob3c6ICdW aWV3IHJldmlld3MgKCVjKScsDQoJCQkJaGlkZTogJ0hpZGUgcmV2aWV3cyAoJWMp JywNCgkJCQlub25lOiAnTm8gcmV2aWV3cycsDQoJCQkJbG9hZDogJ0xvYWRpbmcg ZGF0YS4uLicsDQoJCQkJdXA6ICAgJ1VwZGF0aW5nIHJldmlld3MuLi4nDQoJCQl9 Ow0KCQl9IGVsc2Ugew0KCQkJdGhpcy5wYXR0ZXJucyA9IG9wdHMucGF0dGVybnM7 DQoJCX0NCgkJDQoJCXRoaXMuY2hlY2soKTsNCgl9LA0KCQ0KCWNoZWNrOiBmdW5j dGlvbigpIHsNCgkJdGhpcy51cGRhdGVCdG5UZXh0KGZhbHNlKTsNCgkJaWYgKHRo aXMuY291bnQ+MCkgew0KCQkJJCgncmV2aWV3c18nK3RoaXMuY2lkKS5jbGFzc05h bWUgPSAncmV2aWV3c0JveCc7DQoJCX0gZWxzZSB7DQoJCQkkKCdyZXZpZXdzXycr dGhpcy5jaWQpLmNsYXNzTmFtZSA9ICdyZXZpZXdzQm94IHJldmlld3NOdWxsJzsN CgkJCSQoJ3Jldmlld3NfYm9keV8nK3RoaXMuY2lkKS5oaWRlKCk7DQoJCX0NCgkJ aWYgKCF0aGlzLm1pbmUpIHsNCgkJCSQoJ3Jldmlld3NfYnRuX2FkZGZvcm1fJyt0 aGlzLmNpZCkuc2hvdygpOw0KCQl9IGVsc2Ugew0KCQkJJCgncmV2aWV3c19idG5f YWRkZm9ybV8nK3RoaXMuY2lkKS5oaWRlKCk7DQoJCX0NCgkJJCgncmV2aWV3c19h ZGRmb3JtXycrdGhpcy5jaWQpLmhpZGUoKTsNCgl9LA0KCQ0KCWd1ZXN0OiBmdW5j dGlvbigpIHsNCgkJaWYgKHRoaXMub25seVVzZXIgJiYgdGhpcy51aWQgPT0gLTEp IHsNCgkJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy5yZWRpcmVjdDsNCgkJ CXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9LA0KCQ0KCXRv Z2dsZTogZnVuY3Rpb24obW9kZSwgc3VmZml4LCByZXZpZXdJRCkgew0KCQlpZiAo bW9kZSAhPSAnYm9keScgJiYgdGhpcy5ndWVzdCgpIHx8IG1vZGUgPT0gJ2JvZHkn ICYmIHRoaXMuY291bnQ8MSkgew0KCQkJcmV0dXJuICdjbG9zZWQnOw0KCQl9DQoJ CXZhciBySUQgPSByZXZpZXdJRCA/ICdfJytyZXZpZXdJRCA6ICcnOw0KCQl2YXIg c2Z4ID0gc3VmZml4ID8gJ18nK3RoaXMudWlkIDogJyc7DQoJCXZhciBpZCA9ICdy ZXZpZXdzXycgKyBtb2RlICsgJ18nICsgdGhpcy5jaWQgKyBzZnggKyBySUQ7DQoJ CWlmICgkKGlkKS5vZmZzZXRIZWlnaHQpIHsNCgkJCWlmIChtb2RlID09ICdib2R5 Jykgew0KCQkJCXRoaXMudXBkYXRlQnRuVGV4dChmYWxzZSk7DQoJCQl9IGVsc2Ug aWYgKG1vZGUgPT0gJ2VkaXRmb3JtJykgew0KCQkJCSQoJ3Jldmlld3NfdGV4dF8n ICsgdGhpcy5jaWQgKyBzZnggKyBySUQpLnNob3coKTsNCgkJCX0NCgkJCSQoaWQp LmhpZGUoKTsNCgkJCXJldHVybiAnY2xvc2VkJzsNCgkJfSBlbHNlIHsNCgkJCWlm IChtb2RlID09ICdib2R5Jykgew0KCQkJCWlmICghdGhpcy5sb2FkZWRCb2R5KSB7 DQoJCQkJCXRoaXMuZ2V0KCk7DQoJCQkJfQ0KCQkJCXRoaXMudXBkYXRlQnRuVGV4 dCh0cnVlKTsNCgkJCX0gZWxzZSBpZiAobW9kZSA9PSAnZWRpdGZvcm0nKSB7DQoJ CQkJJCgncmV2aWV3c190ZXh0XycgKyB0aGlzLmNpZCArIHNmeCArIHJJRCkuaGlk ZSgpOw0KCQkJfQ0KCQkJJChpZCkuc2hvdygpOw0KCQkJcmV0dXJuICdvcGVuZWQn Ow0KCQl9DQoJfSwNCgkNCgl1cGRhdGVCdG5UZXh0OiBmdW5jdGlvbih0cmlnZ2Vy KSB7DQoJCXZhciBidG4gPSAkKCdyZXZpZXdzX2J0bl9ib2R5XycgKyB0aGlzLmNp ZCk7DQoJCXZhciB2aXNpYmxlID0gdHlwZW9mKHRyaWdnZXIgPT0gJ2Jvb2xlYW4n KSA/IHRyaWdnZXIgOiAoJ3Jldmlld3NfYm9keV8nICsgdGhpcy5jaWQpLm9mZnNl dEhlaWdodDsNCgkJdmFyIHRleHQgPSB0aGlzLmNvdW50PDEgPyB0aGlzLnBhdHRl cm5zLm5vbmUgOiAodmlzaWJsZSA/IHRoaXMucGF0dGVybnMuaGlkZS5yZXBsYWNl KCclYycsdGhpcy5jb3VudCkgOiB0aGlzLnBhdHRlcm5zLnNob3cucmVwbGFjZSgn JWMnLHRoaXMuY291bnQpKTsNCgkJYnRuLmlubmVySFRNTCA9IHRleHQ7DQoJfSwN CgkNCglnZXQ6IGZ1bmN0aW9uKCkgew0KCQkkKCdyZXZpZXdzX2JvZHlfJyArIHRo aXMuY2lkKS5pbm5lckhUTUwgPSB0aGlzLnBhdHRlcm5zLmxvYWQ7DQoJCXRoaXMu YWpheCh7cG9zdFZhcnM6ICdVc2VyUmV2aWV3c19hY3Rpb249cmV2aWV3R2V0TGlz dCcsDQoJCQkJCQkJb25TdWNjZXNzOiBmdW5jdGlvbih0KSB7DQoJCQkJCQkJCSQo J3Jldmlld3NfYm9keV8nICsgb2JqUmV2aWV3LmNpZCkuaW5uZXJIVE1MID0gdC5y ZXNwb25zZVRleHQ7DQoJCQkJCQkJCW9ialJldmlldy5sb2FkZWRCb2R5ID0gdHJ1 ZTsNCgkJCQkJCQl9fSk7DQoJfSwNCgkNCglhZGQ6IGZ1bmN0aW9uKCkgew0KCQlp ZiAoISh0ZXh0ID0gJCgncmV2aWV3c19hZGRfJyArIHRoaXMuY2lkKS52YWx1ZS5l c2NhcGVIVE1MKCkpKSB7DQoJCQkkKCdyZXZpZXdzX2J0bl9hZGRmb3JtXycgKyB0 aGlzLmNpZCkuY2xhc3NOYW1lID0gdGhpcy50b2dnbGUoJ2FkZGZvcm0nKTsNCgkJ CXJldHVybjsNCgkJfQkJDQoJCXRoaXMuYWpheCh7cG9zdFZhcnM6ICdVc2VyUmV2 aWV3c19hY3Rpb249cmV2aWV3QWRkJlVzZXJSZXZpZXdzX3RleHQ9JyArIHRleHQs DQoJCQkJCQkJb25TdWNjZXNzOiBmdW5jdGlvbih0KSB7DQoJCQkJCQkJCW9ialJl dmlldy5jb3VudCsrOw0KCQkJCQkJCQlvYmpSZXZpZXcubWluZSA9IHRydWU7DQoJ CQkJCQkJCXdpbmRvdy5jbGVhckNhY2hlKCk7DQoJCQkgIAkJCSAgb2JqUmV2aWV3 LmNoZWNrKCk7DQoJCQkJCQkJCW9ialJldmlldy5nZXQoKTsNCgkJCQkJICAgIH19 KTsNCgl9LA0KCQ0KCWVkaXQ6IGZ1bmN0aW9uKHJldmlld0lEKSB7DQoJCWlmICgh KHRleHQgPSAkKCdyZXZpZXdzX2VkaXRfJyArIHRoaXMuY2lkICsgJ18nICsgdGhp cy51aWQgKyAnXycgKyByZXZpZXdJRCkudmFsdWUuZXNjYXBlSFRNTCgpKSkgew0K CQkJdGhpcy50b2dnbGUoJ2VkaXRmb3JtJywxLHJldmlld0lEKTsNCgkJCXJldHVy bjsNCgkJfQ0KCQkkKCdyZXZpZXdzX3RleHRfJyArIHRoaXMuY2lkICsgJ18nICsg dGhpcy51aWQgKyAnXycgKyByZXZpZXdJRCkuaW5uZXJIVE1MID0gdGhpcy5wYXR0 ZXJucy51cDsNCgkJdGhpcy50b2dnbGUoJ2VkaXRmb3JtJywxLHJldmlld0lEKTsN CgkJdGhpcy5hamF4KHtwb3N0VmFyczogJ1VzZXJSZXZpZXdzX2FjdGlvbj1yZXZp ZXdVcGRhdGUmVXNlclJldmlld3NfcmV2aWV3SWQ9JytyZXZpZXdJRCsnJlVzZXJS ZXZpZXdzX3RleHQ9JyArIHRleHQsDQoJCQkJCQkJb25TdWNjZXNzOiBmdW5jdGlv bih0KSB7DQoJCQkJCQkJCSQoJ3Jldmlld3NfdGV4dF8nICsgb2JqUmV2aWV3LmNp ZCArICdfJyArIG9ialJldmlldy51aWQgKyAnXycgKyByZXZpZXdJRCkuaW5uZXJI VE1MID0gdGV4dDsNCgkJCQkJICAgIH19KTsNCgl9LA0KCQ0KCXJlbW92ZTogZnVu Y3Rpb24ocmV2aWV3SUQpIHsNCgkJdGhpcy5hamF4KHtwb3N0VmFyczogJ1VzZXJS ZXZpZXdzX2FjdGlvbj1yZXZpZXdEZWwmVXNlclJldmlld3NfcmV2aWV3SWQ9Jyty ZXZpZXdJRCwNCgkJCQkJCQlvblN1Y2Nlc3M6IGZ1bmN0aW9uKHQpIHsNCgkJCQkJ CQkJb2JqUmV2aWV3LmNvdW50LS07DQoJCQkJCQkJCW9ialJldmlldy5taW5lID0g ZmFsc2U7DQoJCQkJCQkJCXdpbmRvdy5jbGVhckNhY2hlKCk7DQoJCQkgIAkJCSAg b2JqUmV2aWV3LmNoZWNrKCk7DQoJCQkJCQkJCW9ialJldmlldy5nZXQoKTsNCgkJ CQkJICAgIH19KTsNCgl9LA0KCQ0KCXZvdGU6IGZ1bmN0aW9uKHJldmlldywgdm90 ZSkgew0KCQlpZiAodGhpcy5ndWVzdCgpKSB7DQoJCQlyZXR1cm47DQoJCX0NCgkJ dGhpcy5sYXN0UmV2aWV3ID0gcmV2aWV3Ow0KCQl0aGlzLmFqYXgoe3Bvc3RWYXJz OiAnVXNlclJldmlld3NfYWN0aW9uPXJldmlld1ZvdGUmVXNlclJldmlld3NfcmV2 aWV3SWQ9JyArIHJldmlldyArICcmVXNlclJldmlld3Nfdm90ZVR5cGU9JyArIHZv dGUsDQoJCQkJCQkJb25TdWNjZXNzOiBmdW5jdGlvbih0KSB7DQoJCQkJCQkJCSQo J3Jldmlld3NfYWN0aW9uc18nICsgb2JqUmV2aWV3Lmxhc3RSZXZpZXcpLmlubmVy SFRNTCA9IHQucmVzcG9uc2VUZXh0Ow0KCQkJCQkgICAgfX0pOw0KCX0sDQoJDQoJ YWpheDogZnVuY3Rpb24ob3B0cykgew0KCQlvYmpSZXZpZXcgPSB0aGlzOw0KCQlv cHRzLnBvc3RCb2R5ID0gdGhpcy5hcHBTdGF0ZSsnbW9kZV9hamF4PXRydWUmVXNl clJldmlld3NfY2lkPScgKyB0aGlzLmNpZCArIHRoaXMucmV2aWV3VHlwZSArICcm JyArIG9wdHMucG9zdFZhcnMgOw0KCQlvcHRzLm1ldGhvZCA9ICdwb3N0JzsNCgkJ b3B0cy5vbkZhaWx1cmUgPSBmdW5jdGlvbih0KSB7IH07Ly9hbGVydCgnRXJyb3Ig JyArIHQuc3RhdHVzICsgJyAtLSAnICsgdC5zdGF0dXNUZXh0KTsgfTsNCgkJcmVx dWVzdCA9IG5ldyBBamF4LlJlcXVlc3QoJ3VzZXJyZXZpZXdzLnBocD8nLCBvcHRz KTsNCgl9DQoJDQp9DQo= ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=common.js Content-Type: application/javascript; charset=UTF-8; name=common.js Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/common.js Content-Transfer-Encoding: Base64 d2luZG93LmRlZmF1bHROdW09NSAvL2tvbGljaGVjdHZvIGJsb2tvdiBzcHJhdmEg cG8gdW1vbGNoYW5peXUNCndpbmRvdy5ub1NlbGVjdHMgPSBmYWxzZTsgLy96YWdy dWphdCBkZWtvcmF0aXZuaWUgc2VsZWN0cw0KDQoNCmZ1bmN0aW9uIGluaXQoKSB7 DQoJDQoJbmV3IEFkZERlY29yKCcuc2NlbmVfbWVudSBkdCcsICdib3RoJyxmYWxz ZSk7DQoJbmV3IEFkZERlY29yKCcuZHZkX21lbnUgZHQnLCdib3RoJyxmYWxzZSk7 DQoJc2V0VGltZW91dChmdW5jdGlvbigpDQoJew0KCQlwb3BVcFdpbmRvdy5pbml0 KCk7DQoJCXRyeQ0KCQl7DQoJCW15UmJpciA9IG5ldyBSYmlyKA0KCQl7DQoJCQlk ZWY6W2Rlc2lnblBhdGgrJy9pbWFnZXMvcmFkaW9fb24uZ2lmJywgZGVzaWduUGF0 aCsnL2ltYWdlcy9yYWRpb19vZmYuZ2lmJ10sIC8vREVGQVVMVCBJTUFHRVMNCgkJ CWRhcms6W2Rlc2lnblBhdGgrJy9pbWFnZXMvcmFkaW9fYWN0X2RhcmsuZ2lmJywg ZGVzaWduUGF0aCsnL2ltYWdlcy9yYWRpb19kZWZfZGFyay5naWYnXQ0KCQkJDQoJ CX0pO30NCgkJLypjYXRjaChlKXsNCgkJLy8NCgkJfQ0KCQl0cnkNCgkJew0KCQlt eUNiaXIgPSBuZXcgQ2JpcigNCgkJew0KCQkJZGVmOltkZXNpZ25QYXRoKycvaW1h Z2VzL2NoZWNrYm94X2FjdC5naWYnLCBkZXNpZ25QYXRoKycvaW1hZ2VzL2NoZWNr Ym94X2RlZi5naWYnXQ0KCQl9KTt9Ki8NCgkJY2F0Y2goZSl7DQoJCS8vDQoJCX0N CgkJKGRvY3VtZW50LmFsbCAmJiAhd2luZG93LnByaW50KSA/IG51bGwgOiBTYnIu aW5pdCgpOw0KCX0sNTApOw0KCUZsYXNoVGFicy5pbml0KCk7DQoJYm9keUhlaWdo dCgpOw0KfQ0KDQpmdW5jdGlvbiBpbml0QWZ0ZXJBamF4KGFqYXhfaWQpIHsNCglp ZiAoIWFqYXhfaWQpIHJldHVybiBmYWxzZTsNCgkvL2JhbGxvb25UaXAuaGlkZSgp Ow0KCVNici5pbml0KGFqYXhfaWQpOw0KCXRyeQ0KCXsNCgkJbXlSYmlyID0gbmV3 IFJiaXIoDQoJCXsNCgkJCWRlZjpbZGVzaWduUGF0aCsnL2ltYWdlcy9yYWRpb19v bi5naWYnLCBkZXNpZ25QYXRoKycvaW1hZ2VzL3JhZGlvX29mZi5naWYnXSwgLy9E RUZBVUxUIElNQUdFUw0KCQkJZGFyazpbZGVzaWduUGF0aCsnL2ltYWdlcy9yYWRp b19hY3RfZGFyay5naWYnLCBkZXNpZ25QYXRoKycvaW1hZ2VzL3JhZGlvX2RlZl9k YXJrLmdpZiddDQoJCX0sIGFqYXhfaWQpOw0KCQkNCgkJbXlDYmlyID0gbmV3IENi aXIoDQoJCXsNCgkJCWRlZjpbZGVzaWduUGF0aCsnL2ltYWdlcy9jaGVja2JveF9h Y3QuZ2lmJywgZGVzaWduUGF0aCsnL2ltYWdlcy9jaGVja2JveF9kZWYuZ2lmJ10N CgkJfSwgYWpheF9pZCk7DQoJfQ0KCWNhdGNoKGUpew0KCQkvLw0KCX0NCglyZXNp emVUYWJzKCk7DQoJcmV0dXJuIHRydWU7DQp9DQoNCg0KLy8gRXZlbnQtU2VsZWN0 b3JzDQp2YXIgcnVsZXNEZWZhdWx0ID0gew0KCS8vIFNob3crSGlkZSBiYWxsb29u LXRvb2x0aXAgb3ZlciB0aGUgbW9kZWxzDQoJJ2Rpdi5tb2RlbHMgaW1nOm1vdXNl b3Zlcic6IGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50KSB7DQoJCWlmICghZWxlbWVu dC50aXApIHsNCgkJCWVsZW1lbnQudGlwID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUo J2FsdCcpID8gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FsdCcpIDogJyc7DQoJCQll bGVtZW50LnNldEF0dHJpYnV0ZSgnYWx0JywnJyk7DQoJCX0NCgkJYmFsbG9vblRp cC5zaG93KGVsZW1lbnQudGlwLCB7J3gnOi0xNSwneSc6LTM1fSwgJ3NpbXBsZUJh bGxvb24nKTsNCiAgfSwNCgknZGl2Lm1vZGVscyBpbWc6bW91c2VvdXQnOiBmdW5j dGlvbihlbGVtZW50KSB7DQogICAgYmFsbG9vblRpcC5oaWRlKCk7DQogIH0sDQoJ J3RhYmxlLmdhbGxlcnkgZGl2LnRodW1iIGltZzptb3VzZW92ZXInOiBmdW5jdGlv bihlbGVtZW50LCBldmVudCkgew0KCQl2YXIgb2JqID0gZWxlbWVudDsNCgkJd2hp bGUgKG9iaiA9IG9iai5wYXJlbnROb2RlKSB7DQoJCQlpZiAob2JqLmNsYXNzTmFt ZSA9PSAnaXRlbScpIGJyZWFrOw0KCQl9DQoJCWlmIChpbmZvID0gZG9jdW1lbnQu Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaXRlbV9pbmZvJyxvYmopWzBdKSBiYWxs b29uVGlwLnNob3coaW5mbywgMjUpOw0KICB9LA0KCSd0YWJsZS5nYWxsZXJ5IGRp di50aHVtYiBpbWc6bW91c2VvdXQnOiBmdW5jdGlvbihlbGVtZW50KSB7DQogICAg YmFsbG9vblRpcC5oaWRlKCk7DQogIH0sDQogICdkaXYubW9kZWxfcGhvdG9zIGRp di53cmFwIGltZzptb3VzZW92ZXInOiBmdW5jdGlvbihlbGVtZW50LCBldmVudCkg ew0KCQlpZiAoIWVsZW1lbnQudGlwKSB7DQoJCQllbGVtZW50LnRpcCA9IGVsZW1l bnQuZ2V0QXR0cmlidXRlKCdhbHQnKSA/IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdh bHQnKSA6ICcnOw0KCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FsdCcsJycpOw0K CQl9DQoJCWJhbGxvb25UaXAuc2hvdyhlbGVtZW50LnRpcCwgeyd4JzotMTUsJ3kn Oi0zNX0sICdzaW1wbGVCYWxsb29uJyk7DQogIH0sDQoJJ2Rpdi5tb2RlbF9waG90 b3MgZGl2LndyYXAgaW1nOm1vdXNlb3V0JzogZnVuY3Rpb24oZWxlbWVudCkgew0K ICAgIGJhbGxvb25UaXAuaGlkZSgpOw0KICB9LA0KICAnZGl2Lm1vZGVsX3ZpZGVv cyBpbWc6bW91c2VvdmVyJzogZnVuY3Rpb24oZWxlbWVudCwgZXZlbnQpIHsNCgkJ aWYgKCFlbGVtZW50LnRpcCkgew0KCQkJZWxlbWVudC50aXAgPSBlbGVtZW50Lmdl dEF0dHJpYnV0ZSgnYWx0JykgPyBlbGVtZW50LmdldEF0dHJpYnV0ZSgnYWx0Jykg OiAnJzsNCgkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKCdhbHQnLCcnKTsNCgkJfQ0K CQliYWxsb29uVGlwLnNob3coZWxlbWVudC50aXAsIHsneCc6LTE1LCd5JzotMzV9 LCAnc2ltcGxlQmFsbG9vbicpOw0KICB9LA0KCSdkaXYubW9kZWxfdmlkZW9zIGlt Zzptb3VzZW91dCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsNCiAgICBiYWxsb29uVGlw LmhpZGUoKTsNCiAgfQ0KfQ0KDQpBamF4LlJlc3BvbmRlcnMucmVnaXN0ZXIoew0K ICBvbkNvbXBsZXRlOiBmdW5jdGlvbigpIHsgRXZlbnRTZWxlY3RvcnMuYXNzaWdu KHJ1bGVzRGVmYXVsdCk7fQ0KfSkNCg0KZnVuY3Rpb24gb3BlbkltYWdlKHVybCxp bWFnZV94LGltYWdlX3kpDQp7DQogICAgWF9wb3MgPSAoc2NyZWVuLndpZHRoLzIp LShpbWFnZV94LzIpOw0KICAgIFlfcG9zID0gKHNjcmVlbi5oZWlnaHQvMiktKGlt YWdlX3kvMik7DQogICAgd2luZG93Lm9wZW4odXJsLCdpbWFnZXdpbicsJ3Njcm9s bGJhcnM9bm8scmVzaXphYmxlPW5vLGxlZnQ9JytYX3BvcysnLHRvcD0nK1lfcG9z Kycsd2lkdGg9JytpbWFnZV94KycsaGVpZ2h0PScraW1hZ2VfeSk7DQp9DQoNCi8q IERPTS1yZWFkeSB3YXRjaGVyIGJ5IGJyb3RoZXJjYWtlLCBodHRwOi8vd3d3LmJy b3RoZXJjYWtlLmNvbS9zaXRlL3Jlc291cmNlcy9zY3JpcHRzL2RvbXJlYWR5LyAq Lw0KZnVuY3Rpb24gZG9tRnVuY3Rpb24oZiwgYSkgew0KCXZhciBuID0gMDsNCgl2 YXIgdCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgew0KCQl2YXIgYyA9IHRydWU7 DQoJCW4rKzsNCgkJaWYgKHR5cGVvZiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn TmFtZSAhPSAndW5kZWZpbmVkJyAmJiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh Z05hbWUoJ2JvZHknKVswXSAhPSBudWxsIHx8IGRvY3VtZW50LmJvZHkgIT0gbnVs bCkpIHsNCgkJCWMgPSBmYWxzZTsNCgkJCWlmICh0eXBlb2YgYSA9PSAnb2JqZWN0 Jykgew0KCQkJCWZvciAodmFyIGkgaW4gYSkgew0KCQkJCQlpZiAoKGFbaV0gPT0g J2lkJyAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKSA9PSBudWxsKSB8fCAo YVtpXSA9PSAndGFnJyAmJiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShp KS5sZW5ndGggPCAxKSApIHsNCgkJCQkJCWMgPSB0cnVlOw0KCQkJCQkJYnJlYWs7 DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlpZiAoIWMpIHsgZigpOyBjbGVhcklu dGVydmFsKHQpOyB9DQoJCX0NCgkJaWYgKG4gPj0gNjApIHsNCgkJCWNsZWFySW50 ZXJ2YWwodCk7DQoJCX0NCgl9LCAyNTApOw0KfTsNCg0KLyoqDQogKiBBZGQgc29t ZSBodG1sIGZvciBkZWNvcmluZyBhbnkgZWxlbWVudCBieSBjc3MuDQogKg0KICog ZWxlbWVudHMgKHJlcXVpcmVkKSAtIGVsZW1lbnRzIGluIGNzcyBzdHlsZSwgbGlr ZSAnI21lbnUgbGknDQogKiBsYXlvdXQgLSB3aGVyZSBhZGQgZGVjb3I6ICd0b3An LCAnYm90dG9tJyBvciAnYm90aCcgKGJ5IGRlZmF1bHQpDQogKiB3cmFwIC0gYWRk IGFsbCBjaGlsZHMgdG8gYSB3cmFwOiB0cnVlIChieSBkZWZhdWx0KSBvciBmYWxz ZQ0KICovDQpmdW5jdGlvbiBBZGREZWNvciAoZWxlbWVudHMsIGxheW91dCwgd3Jh cCwgaWQpIHsNCglpZiAoIWVsZW1lbnRzKSByZXR1cm4gZmFsc2U7DQoJdmFyIHNl YXJjaFVuZGVyID0gaWQgPyAnIycraWQrJyAnIDogJyc7DQoJc3dpdGNoIChsYXlv dXQpIHsNCgkJY2FzZSAndG9wJzogdGhpcy5sYXlvdXQgPSAndG9wJzsgYnJlYWs7 DQoJCWNhc2UgJ2JvdHRvbSc6IHRoaXMubGF5b3V0ID0gJ2JvdHRvbSc7IGJyZWFr Ow0KCQlkZWZhdWx0OiB0aGlzLmxheW91dCA9ICdib3RoJzsNCgl9DQoJdGhpcy53 cmFwID0gd3JhcCA9PSBudWxsID8gdHJ1ZSA6ICh3cmFwID09IGZhbHNlID8gZmFs c2UgOiB0cnVlKTsNCg0KCXZhciBzZWxBcnIgPSBlbGVtZW50cy5zcGxpdCgnLCcp Ow0KCXZhciBzZWxOdW0gPSBzZWxBcnIubGVuZ3RoOw0KCWZvciAodmFyIGo9MDtq PHNlbE51bTtqKyspIHsNCgkJdmFyIGVsQXJyID0gJCQoc2VhcmNoVW5kZXIrc2Vs QXJyW2pdKTsNCgkJdmFyIGVsTnVtID0gZWxBcnIubGVuZ3RoOw0KCQlmb3IgKHZh ciBpPTA7aTxlbE51bTtpKyspIHsNCgkJCXRoaXMud29yayhlbEFycltpXSk7DQoJ CX0NCgl9DQoJcmV0dXJuIHRydWU7DQp9DQoNCkFkZERlY29yLnByb3RvdHlwZS53 b3JrID0gZnVuY3Rpb24oZWwpIHsNCgllbENoaWxkc051bSA9IGVsLmNoaWxkTm9k ZXMubGVuZ3RoOw0KDQoJaWYgKHRoaXMud3JhcCkgew0KCQl2YXIgd3JhcE9iaiA9 IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KCQl3cmFwT2JqLmNsYXNz TmFtZSA9ICdkZWNvcldyYXAnOw0KCQl3aGlsZShlbC5maXJzdENoaWxkKSB3cmFw T2JqLmFwcGVuZENoaWxkKGVsLmZpcnN0Q2hpbGQpOw0KCQllbC5hcHBlbmRDaGls ZCh3cmFwT2JqKTsNCgl9DQoNCglpZiAodGhpcy5sYXlvdXQgPT0gJ3RvcCcgfHwg dGhpcy5sYXlvdXQgPT0gJ2JvdGgnKSB7DQoJCXZhciBkZWNvclRvcCA9IGRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoJ2InKTsNCgkJZGVjb3JUb3AuY2xhc3NOYW1lID0g J2RlY29yU3RyIGRlY29yVG9wJzsNCgkJdmFyIGRlY29yTGVmdCA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ2knKTsNCgkJZGVjb3JMZWZ0LmNsYXNzTmFtZSA9ICdk ZWNvckxlZnQnOw0KCQlkZWNvclRvcC5hcHBlbmRDaGlsZChkZWNvckxlZnQpOw0K CQl2YXIgZGVjb3JDZW50cmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJyk7 DQoJCWRlY29yQ2VudHJlLmNsYXNzTmFtZSA9ICdkZWNvckNlbnRyZSc7DQoJCWRl Y29yVG9wLmFwcGVuZENoaWxkKGRlY29yQ2VudHJlKTsNCgkJdmFyIGRlY29yUmln aHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJyk7DQoJCWRlY29yUmlnaHQu Y2xhc3NOYW1lID0gJ2RlY29yUmlnaHQnOw0KCQlkZWNvclRvcC5hcHBlbmRDaGls ZChkZWNvclJpZ2h0KTsNCg0KCQlpZiAoZWwuZmlyc3RDaGlsZCkgew0KCQkJZWwu aW5zZXJ0QmVmb3JlKGRlY29yVG9wLCBlbC5maXJzdENoaWxkKTsNCgkJfSBlbHNl IHsNCgkJCWVsLmFwcGVuZENoaWxkKGRlY29yVG9wKTsNCgkJfQ0KCX0NCg0KCWlm ICh0aGlzLmxheW91dCA9PSAnYm90dG9tJyB8fCB0aGlzLmxheW91dCA9PSAnYm90 aCcpIHsNCgkJdmFyIGRlY29yQm90dG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu dCgnYicpOw0KCQlkZWNvckJvdHRvbS5jbGFzc05hbWUgPSAnZGVjb3JTdHIgZGVj b3JCb3R0b20nOw0KCQl2YXIgZGVjb3JMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgnaScpOw0KCQlkZWNvckxlZnQuY2xhc3NOYW1lID0gJ2RlY29yTGVmdCc7 DQoJCWRlY29yQm90dG9tLmFwcGVuZENoaWxkKGRlY29yTGVmdCk7DQoJCXZhciBk ZWNvckNlbnRyZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKTsNCgkJZGVj b3JDZW50cmUuY2xhc3NOYW1lID0gJ2RlY29yQ2VudHJlJzsNCgkJZGVjb3JCb3R0 b20uYXBwZW5kQ2hpbGQoZGVjb3JDZW50cmUpOw0KCQl2YXIgZGVjb3JSaWdodCA9 IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKTsNCgkJZGVjb3JSaWdodC5jbGFz c05hbWUgPSAnZGVjb3JSaWdodCc7DQoJCWRlY29yQm90dG9tLmFwcGVuZENoaWxk KGRlY29yUmlnaHQpOw0KDQoJCWVsLmFwcGVuZENoaWxkKGRlY29yQm90dG9tKTsN Cgl9DQp9DQoNCi8qKg0KICogU2VsZWN0IGJveGVzIHJlcGxhY2VyDQogKiBieSBa ZVQsIGh0dHA6Ly96ZXQub2QudWENCiAqIHZlcnNpb24gMC41LjIwMDctMDItMDIN CiAqDQogKiBiYXNlZCBvbiBodHRwOi8vd3d3LmVhc3ktZGVzaWducy5uZXQvYXJ0 aWNsZXMvcmVwbGFjZVNlbGVjdDIvDQogKi8NCnZhciB3aXRob3V0SWQgPSAwOw0K DQp2YXIgU2JyID0gew0KCWluaXQ6IGZ1bmN0aW9uKGlkKSB7DQoJCXRoaXMubGFz dCA9IGZhbHNlOw0KCQl0aGlzLnRyaWdnZXIgPSBmYWxzZTsNCg0KCQlpZiAoaWQg JiYgKGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpKSB7DQoJCQl0 aGlzLnMgPSBmb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCgkJ fSBlbHNlIHsNCgkJCXRoaXMucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO YW1lKCdzZWxlY3QnKTsNCgkJCXdpdGhvdXRJZCA9IDE7DQoJCX0NCiAgICAJdGhp cy5zQ291bnQgPSB0aGlzLnMubGVuZ3RoOw0KCQlmb3IgKHZhciBpPTA7IGk8dGhp cy5zQ291bnQ7IGkrKykgew0KCQkgIGlmICghdGhpcy5zW2ldLm11bHRpcGxlKSB7 DQogIAkJCWlmICghdGhpcy5zW2ldLmlkKSB7DQogIAkJCQl0aGlzLnNbaV0uaWQg PSAnc2VsZWN0XycraTsNCiAgCQkJfQ0KCQkgIAlpZiAod2l0aG91dElkID09IDEg JiYgdGhpcy5zW2ldLmlkID09ICdjaG9zZW5Qcm9ibGVtJykgew0KCQkJCS8vIHNl bGVjdCB3aXRoIElEICdjaG9zZW5Qcm9ibGVtJyB3aWxsIGJlIHN0eWxlZCBhZnRl ciBwb3B1cCB3aW5kb3cgYmVpbmcgbG9hZGVkLg0KCQkJCS8vIElkZW50aXZhbCBz dHlsaW5nIGNsYXNzIGxpa2UgIlNiciIgd2FzIHJlYWxpemVkIGluIHBvcHVwLmpz DQoJCQl9IGVsc2Ugew0KCQkJCXRoaXMucnVuKHRoaXMuc1tpXSwgaSk7DQoJCQl9 DQogCQkgIH0NCgkJfQ0KCX0sDQoNCglydW46IGZ1bmN0aW9uKG9iaiwgY291bnRl cikgew0KCQkvLyBidWlsZGluZyBmYXV4IHNlbGVjdCBzdHJ1Y3R1cmUNCgkJDQoJ CQ0KCQkNCgkJZmF1eFNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RsJyk7 DQoJCWZhdXhTZWwuY2xhc3NOYW1lID0gb2JqLmNsYXNzTmFtZSA/IG9iai5jbGFz c05hbWUgKyAnIHNicldyYXAnIDogJ3NicldyYXAnOw0KCQkNCgkJb2JqLmNsYXNz TmFtZSA9ICdzZWxSZXBsYWNlZCc7DQoJCQ0KCWZvcihpPTA7IGk8PSAkJCgnLnBl cnBhZ2UnKS5sZW5ndGggLTE7IGkrKykgew0KCQl3aW5kb3cuYXJyb3dDbGljayA9 ICQkKCcucGVycGFnZScpW2ldOw0KCQl3aW5kb3cuYXJyb3dDbGljay5vbmNsaWNr ID0gZnVuY3Rpb24oKXsJDQoJCQl2YXIgc2VsZWN0RWxlbWVudCA9IHRoaXMubmV4 dCgpLmRvd24oJy5zYnJXcmFwJykubmV4dFNpYmxpbmc7DQoJCQlpZiAodGhpcy5u ZXh0KCkuZG93bignLnNicldyYXAnKS5jaGlsZE5vZGVzWzFdLmNsYXNzTmFtZSA9 PSAnc2JyT3B0c0NvbCcpIHsNCgkJCQlzZWxlY3RFbGVtZW50Lm9uZm9jdXMoKTsN CgkJCQlTYnIubGFzdC5jbGFzc05hbWUgPSAnc2JyT3B0c0NvbCc7DQoJCQkJU2Jy Lmxhc3QgPSB0aGlzLm5leHQoKS5kb3duKCcuc2JyV3JhcCcpLmNoaWxkTm9kZXNb MV07DQoJCQkJU2JyLnRyaWdnZXIgPSBmYWxzZTsNCgkJCQlkb2N1bWVudC5vbmNs aWNrID0gZnVuY3Rpb24oKSB7IGlmIChTYnIudHJpZ2dlcikgU2JyLmxhc3QuY2xh c3NOYW1lID0gJ3Nick9wdHNDb2wnOyBTYnIudHJpZ2dlciA9IHRydWU7IH0NCgkJ CQl0aGlzLm5leHQoKS5kb3duKCcuc2JyV3JhcCcpLmNoaWxkTm9kZXNbMV0uY2xh c3NOYW1lID0gJ3Nick9wdHNFeHAnOw0KCQkJfSBlbHNlIHsNCgkJCQlTYnIubGFz dE9iaklkID0gZmFsc2U7DQoJCQkJZG9jdW1lbnQub25jbGljayA9IGZ1bmN0aW9u KCkgewl9DQoJCQkJdGhpcy5uZXh0KCkuZG93bignLnNicldyYXAnKS5jaGlsZE5v ZGVzWzFdLmNsYXNzTmFtZSA9ICdzYnJPcHRzQ29sJzsNCgkJCX0NCgkJCWlmICh0 aGlzLm5leHQoKS5kb3duKCcuc2JyV3JhcCcpLmNoaWxkTm9kZXNbMF0uY2xhc3NO YW1lID09ICcnKSB7DQoJCQkJdGhpcy5uZXh0KCkuZG93bignLnNicldyYXAnKS5u ZXh0U2libGluZy5mb2N1cygpOw0KCQkJfQ0KCQl9DQoJCQ0KCX0NCg0KCQkNCgkJ DQoNCgkJZmF1eFNlbC5vbmNsaWNrID0gZnVuY3Rpb24oKSB7CQ0KCQkJdmFyIHNl bGVjdEVsZW1lbnQgPSB0aGlzLm5leHRTaWJsaW5nOw0KCQkJaWYgKHRoaXMuY2hp bGROb2Rlc1sxXS5jbGFzc05hbWUgPT0gJ3Nick9wdHNDb2wnKSB7DQoJCQkJc2Vs ZWN0RWxlbWVudC5vbmZvY3VzKCk7DQoJCQkJU2JyLmxhc3QuY2xhc3NOYW1lID0g J3Nick9wdHNDb2wnOw0KCQkJCVNici5sYXN0ID0gdGhpcy5jaGlsZE5vZGVzWzFd Ow0KCQkJCVNici50cmlnZ2VyID0gZmFsc2U7DQoJCQkJZG9jdW1lbnQub25jbGlj ayA9IGZ1bmN0aW9uKCkgeyBpZiAoU2JyLnRyaWdnZXIpIFNici5sYXN0LmNsYXNz TmFtZSA9ICdzYnJPcHRzQ29sJzsgU2JyLnRyaWdnZXIgPSB0cnVlOyB9DQoJCQkJ dGhpcy5jaGlsZE5vZGVzWzFdLmNsYXNzTmFtZSA9ICdzYnJPcHRzRXhwJzsNCgkJ CX0gZWxzZSB7DQoJCQkJU2JyLmxhc3RPYmpJZCA9IGZhbHNlOw0KCQkJCWRvY3Vt ZW50Lm9uY2xpY2sgPSBmdW5jdGlvbigpIHsJfQ0KCQkJCXRoaXMuY2hpbGROb2Rl c1sxXS5jbGFzc05hbWUgPSAnc2JyT3B0c0NvbCc7DQoJCQl9DQoJCQlpZiAodGhp cy5jaGlsZE5vZGVzWzBdLmNsYXNzTmFtZSA9PSAnJykgew0KCQkJCXRoaXMubmV4 dFNpYmxpbmcuZm9jdXMoKTsNCgkJCX0NCgkJfQ0KDQoJCXZhciBjdXJPcHQgPSBk b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkdCcpOw0KCQljdXJPcHQuY2xhc3NOYW1l ID0gJyc7DQoJCWZhdXhTZWwuYXBwZW5kQ2hpbGQoY3VyT3B0KTsNCgkJdmFyIG9w dHNXcmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGQnKTsNCgkJb3B0c1dy YXAuY2xhc3NOYW1lID0gJ3Nick9wdHNDb2wnOw0KCQlmYXV4U2VsLmFwcGVuZENo aWxkKG9wdHNXcmFwKTsNCgkJdmFyIG9wdHNMaXN0ID0gZG9jdW1lbnQuY3JlYXRl RWxlbWVudCgndWwnKTsNCgkJb3B0c1dyYXAuYXBwZW5kQ2hpbGQob3B0c0xpc3Qp Ow0KCQlvcHRzTGlzdC5zdHlsZS56SW5kZXggPSBmYXV4U2VsLnN0eWxlLnpJbmRl eCA9IDEwMDAtY291bnRlcjsNCg0KCQl2YXIgb3B0cyA9IG9iai5vcHRpb25zOw0K CQl2YXIgc2VsZWN0ZWRPcHQgPSAoIW9iai5zZWxlY3RlZEluZGV4KSA/IDAgOiBv Ymouc2VsZWN0ZWRJbmRleDsNCgkJZm9yICh2YXIgaT0wOyBpPG9wdHMubGVuZ3Ro OyBpKyspIHsNCgkJCXZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xp Jyk7DQoJCQl2YXIgdHh0ID0gb3B0c1tpXS50ZXh0ID8gZG9jdW1lbnQuY3JlYXRl VGV4dE5vZGUob3B0c1tpXS50ZXh0KSA6IGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl KCdibGFuayBvcHRpb24nKTsNCgkJCWxpLmFwcGVuZENoaWxkKHR4dCk7DQoJCQls aS50aXRsZSA9IG9wdHNbaV0udGl0bGU7DQoJCQlsaS5zZWxJbmRleCA9IGk7DQoJ CQlsaS5zZWxlY3RJRCA9IG9iai5pZDsNCgkJCWxpLm9uY2xpY2sgPSBmdW5jdGlv bigpIHsNCgkJCQlTYnIuc2VsZWN0TWUodGhpcyk7DQoJCQl9DQoJCQlpZiAoaSA9 PSBzZWxlY3RlZE9wdCkgew0KCQkJCWxpLmNsYXNzTmFtZSA9ICdzYnJTZWxlY3Rl ZCc7DQoJCQkJY3VyT3B0LmFwcGVuZENoaWxkKHR4dC5jbG9uZU5vZGUoZmFsc2Up KTsNCgkJCX0NCgkJCWlmICh3aW5kb3cuYXR0YWNoRXZlbnQpIHsNCgkJCQlsaS5v bm1vdXNlb3ZlciA9IGZ1bmN0aW9uKCkgew0KCQkJCQl0aGlzLmNsYXNzTmFtZSAr PSAnIGhvdmVyJzsNCgkJCQl9DQoJCQkJbGkub25tb3VzZW91dCA9IGZ1bmN0aW9u KCkgew0KCQkJCQl0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lLnJlcGxh Y2UobmV3IFJlZ0V4cCgiIGhvdmVyXFxiIiksICcnKTsNCgkJCQl9DQoJCQl9DQoJ CQlvcHRzTGlzdC5hcHBlbmRDaGlsZChsaSk7DQoJCX0NCgkJb2JqLm9sZG9uZm9j dXMgPSBvYmoub25mb2N1czsNCgkJb2JqLm9uZm9jdXMgPSBmdW5jdGlvbigpIHsN CgkJCWlmICh0aGlzLm9sZG9uZm9jdXMpIHRoaXMub2xkb25mb2N1cygpOw0KCQkJ dGhpcy5wcmV2aW91c1NpYmxpbmcuY2hpbGROb2Rlc1swXS5jbGFzc05hbWUgPSAn c2JyRm9jdXNlZCc7DQoJCX0NCgkJb2JqLm9sZG9uYmx1ciA9IG9iai5vbmJsdXI7 DQoJCW9iai5vbmJsdXIgPSBmdW5jdGlvbigpIHsNCgkJCWlmICh0aGlzLm9sZG9u Ymx1cikgdGhpcy5vbGRvbmJsdXIoKTsNCgkJCXRoaXMucHJldmlvdXNTaWJsaW5n LmNoaWxkTm9kZXNbMF0uY2xhc3NOYW1lID0gJyc7DQoJCX0NCgkJb2JqLm9sZG9u Y2hhbmdlID0gb2JqLm9uY2hhbmdlOw0KCQlvYmoub25jaGFuZ2UgPSBmdW5jdGlv bigpIHsNCgkJCWlmKG9iai5wcmV2aW91cyA9PSB1bmRlZmluZWQpIHsNCgkJCQlv YmoucHJldmlvdXMgPSBvYmoudmFsdWU7DQoJCQl9IGVsc2Ugew0KCQkJCWlmKG9i ai5wcmV2aW91cyA9PSBvYmoudmFsdWUpIHsNCgkJCQkJcmV0dXJuOw0KCQkJCX0g ZWxzZSB7DQoJCQkJCW9iai5wcmV2aW91cyA9IG9iai52YWx1ZTsNCgkJCQl9DQoJ CQl9DQoJCQkvL2FsZXJ0KCJDaGFuZ2UiKTsNCgkJCWlmICh0aGlzLm9sZG9uY2hh bmdlKSB0aGlzLm9sZG9uY2hhbmdlKCk7DQoJCQl2YXIgaWR4ID0gdGhpcy5zZWxl Y3RlZEluZGV4Ow0KCQkJdmFyIHVsID0gdGhpcy5wcmV2aW91c1NpYmxpbmcuY2hp bGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdOw0KCQkJU2JyLnNlbGVjdE1lKHVsLmNo aWxkTm9kZXNbaWR4XSwxKTsNCgkJfQ0KCQlvYmoub25rZXlwcmVzcyA9IG9iai5v bmNoYW5nZTsNCg0KCQlvYmoucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZmF1eFNl bCxvYmopOw0KCX0sDQoNCglzZWxlY3RNZTogZnVuY3Rpb24obGlPYmopIHsNCgkJ dmFyIHNlbGVjdEVsZW1lbnQgPSBsaU9iai5wYXJlbnROb2RlLnBhcmVudE5vZGUu cGFyZW50Tm9kZS5uZXh0U2libGluZzsNCgkJdmFyIGxpcyA9IGxpT2JqLnBhcmVu dE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpJyk7DQoJCWZvciAodmFyIGk9 MDsgaTxsaXMubGVuZ3RoOyBpKyspIHsNCgkJCWlmIChsaXNbaV0gIT0gbGlPYmop IHsNCgkJCQlsaXNbaV0uY2xhc3NOYW1lID0gJyc7DQoJCQkJbGlzW2ldLm9uY2xp Y2sgPSBmdW5jdGlvbigpIHsNCgkJCQkJU2JyLnNlbGVjdE1lKHRoaXMpOw0KCQkJ CX0NCgkJCX0gZWxzZSB7DQoJCQkJdGhpcy5zZXRWYWwobGlPYmouc2VsZWN0SUQs IGxpT2JqLnNlbEluZGV4KTsNCgkJCQlsaU9iai5jbGFzc05hbWUgPSAnc2JyU2Vs ZWN0ZWQnOw0KCQkJCXZhciBjdXJPcHQgPSBsaU9iai5wYXJlbnROb2RlLnBhcmVu dE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzBdOw0KCQkJCWN1ck9wdC5yZW1v dmVDaGlsZChjdXJPcHQuY2hpbGROb2Rlc1swXSk7DQoJCQkJY3VyT3B0LmFwcGVu ZENoaWxkKGxpT2JqLmNoaWxkTm9kZXNbMF0uY2xvbmVOb2RlKGZhbHNlKSk7DQoJ CQkJaWYoYXJndW1lbnRzWzFdICE9IDEpew0KCQkJCQlzZWxlY3RFbGVtZW50Lm9u Y2hhbmdlKCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfSwNCg0KCXNldFZhbDogZnVu Y3Rpb24ob2JqSUQsIHZhbCkgew0KCQl2YXIgb2JqID0gZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQob2JqSUQpOw0KCQlvYmouc2VsZWN0ZWRJbmRleCA9IHZhbDsNCgl9 DQp9DQoNCg0KdmFyIGJhbGxvb25UaXAgPSB7DQoJc2hvdzogZnVuY3Rpb24oc291 cmNlLCBvZmZzZXQsIGJhbGxvb25DbGFzcykgew0KCQlpZiAoIXRoaXMuYmFsbG9v bikgdGhpcy5idWlsZCgpOw0KCQlpZiAoIXNvdXJjZSkgcmV0dXJuIGZhbHNlOw0K CQlpZiAodHlwZW9mKHNvdXJjZSkgPT0gJ29iamVjdCcgJiYgc291cmNlLnRhZ05h bWUgIT0gbnVsbCkgew0KCQkJdGhpcy5zb3VyY2UgPSBzb3VyY2UuY2xvbmVOb2Rl KHRydWUpOw0KCQkJdGhpcy5zb3VyY2Uuc3R5bGUuZGlzcGxheSA9ICcnOw0KCQl9 IGVsc2Ugew0KCQkJdGhpcy5zb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9k ZShzb3VyY2UpOw0KCQl9DQoJCXRoaXMub2Zmc2V0ID0gb2Zmc2V0ID8gKHR5cGVv ZihvZmZzZXQpIT0nb2JqZWN0JyA/IHsneCc6b2Zmc2V0LCd5JzpvZmZzZXR9IDog b2Zmc2V0ICkgOiB7J3gnOjAsJ3knOjB9Ow0KCQl0aGlzLmJhbGxvb24uY2xhc3NO YW1lID0gYmFsbG9vbkNsYXNzID8gYmFsbG9vbkNsYXNzIDogJyc7DQoNCgkJdGhp cy50aXAuYXBwZW5kQ2hpbGQodGhpcy5zb3VyY2UpOw0KCQl0aGlzLnNpemVzID0g ew0KCQkJc2Nyb2xsWCA6IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xs TGVmdCA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogZG9j dW1lbnQuYm9keS5zY3JvbGxMZWZ0KSwNCgkJCXNjcm9sbFkgOiAoZG9jdW1lbnQu ZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA/IGRvY3VtZW50LmRvY3VtZW50RWxl bWVudC5zY3JvbGxUb3AgOiBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCksDQoJCQl3 aW5YIDogKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCA/IGRv Y3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCA6IGRvY3VtZW50LmJv ZHkuY2xpZW50V2lkdGgpLA0KCQkJd2luWSA6IChkb2N1bWVudC5kb2N1bWVudEVs ZW1lbnQuY2xpZW50SGVpZ2h0ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNs aWVudEhlaWdodCA6IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0KQ0KCQl9Ow0K DQoJCWRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZnVuY3Rpb24oZXZlbnQpIHtiYWxs b29uVGlwLnBvc2l0KGV2ZW50KTt9DQoJCXRoaXMuYmFsbG9vbi5zdHlsZS5kaXNw bGF5ID0gJ2Jsb2NrJzsNCgl9LA0KDQoJYnVpbGQ6IGZ1bmN0aW9uKCkgew0KCQl0 aGlzLmJhbGxvb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCgkJ dGhpcy5iYWxsb29uLnNldEF0dHJpYnV0ZSgnaWQnLCdiYWxsb29uJyk7DQoJCXRo aXMuYmFsbG9vbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KCQl0aGlzLnRpcCA9 IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KCQl0aGlzLnRpcC5zZXRB dHRyaWJ1dGUoJ2lkJywnYmFsbG9vbi10aXAnKTsNCgkJdGhpcy5iYWxsb29uLmFw cGVuZENoaWxkKHRoaXMudGlwKTsNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh Z05hbWUoJ2JvZHknKS5pdGVtKDApLmFwcGVuZENoaWxkKHRoaXMuYmFsbG9vbik7 DQoJfSwNCg0KCXBvc2l0OiBmdW5jdGlvbihldnQpIHsNCgkJdGhpcy5iYWxsb29u LnN0eWxlLmxlZnQgPSAnYXV0byc7DQoJCXZhciBiWCA9IHRoaXMuYmFsbG9vbi5v ZmZzZXRXaWR0aDsNCgkJdmFyIGJZID0gdGhpcy5iYWxsb29uLm9mZnNldEhlaWdo dDsNCgkJdmFyIHggPSB0aGlzLm1vdXNlWChldnQpICsgdGhpcy5vZmZzZXQueDsN CgkJdmFyIHkgPSB0aGlzLm1vdXNlWShldnQpICsgdGhpcy5vZmZzZXQueTsNCg0K CQlpZiAoYlggPCB0aGlzLnNpemVzLndpblggJiYgeCAtIHRoaXMuc2l6ZXMuc2Ny b2xsWCArIGJYID49IHRoaXMuc2l6ZXMud2luWCkgew0KCQkJeCAtPSBiWCArIHRo aXMub2Zmc2V0LnggKiAyOw0KCQl9DQoJCWlmIChiWSA8IHRoaXMuc2l6ZXMud2lu WSAmJiB5IC0gdGhpcy5zaXplcy5zY3JvbGxZICsgYlkgPj0gdGhpcy5zaXplcy53 aW5ZKSB7DQoJCQl5IC09IGJZICsgdGhpcy5vZmZzZXQueSAqIDI7DQoJCX0NCg0K CQl0aGlzLmJhbGxvb24uc3R5bGUubGVmdCA9IHggKyAncHgnOw0KCQl0aGlzLmJh bGxvb24uc3R5bGUudG9wID0geSArICdweCc7DQoJfSwNCg0KCWhpZGU6IGZ1bmN0 aW9uKCkgew0KCQlkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGZ1bmN0aW9uKCkgeyBy ZXR1cm4gZmFsc2U7IH0NCgkJdHJ5e3RoaXMudGlwLnJlbW92ZUNoaWxkKHRoaXMu c291cmNlKTt9Y2F0Y2goZSl7fQ0KCQl0aGlzLnNvdXJjZSA9IG51bGw7DQoJCXRo aXMuYmFsbG9vbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KCQl0aGlzLmJhbGxv b24uc3R5bGUubGVmdCA9IHRoaXMuYmFsbG9vbi5zdHlsZS50b3AgPSAnLTEwMDBw eCc7DQoJfSwNCg0KCW1vdXNlWDogZnVuY3Rpb24oZXZ0KSB7DQoJCWlmIChkb2N1 bWVudC5hbGwpIGlmIChldmVudCkgZXZ0ID0gZXZlbnQ7DQoJCWlmIChldnQucGFn ZVgpDQoJCQlyZXR1cm4gZXZ0LnBhZ2VYOw0KCQlpZiAoZXZ0LmNsaWVudFgpDQoJ CQlyZXR1cm4gZXZ0LmNsaWVudFggKyB0aGlzLnNpemVzLnNjcm9sbFg7DQoJCXJl dHVybiAtMTsNCgl9LA0KCW1vdXNlWTogZnVuY3Rpb24oZXZ0KSB7DQoJCWlmIChk b2N1bWVudC5hbGwpIGlmIChldmVudCkgZXZ0ID0gZXZlbnQ7DQoJCWlmIChldnQu cGFnZVkpDQoJCQlyZXR1cm4gZXZ0LnBhZ2VZOw0KCQlpZiAoZXZ0LmNsaWVudFkp DQoJCQlyZXR1cm4gZXZ0LmNsaWVudFkgKyB0aGlzLnNpemVzLnNjcm9sbFk7DQoJ CXJldHVybiAtMTsNCgl9DQp9DQoNCi8qIGhpZGVzICdzcGxhc2gnIGRpdiBhbmQg c2V0cyBjb29raWUgJ2Ntc19zcGxhc2hfc2NyZWVuJyBhYm91dCBpdCAqLw0KZnVu Y3Rpb24gaGlkZVNwbGFzaCgpIHsNCglleHBpcmVzID0gMzY1OyAvLyBkYXlzDQoN Cgl2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpOw0KCXRvZGF5LnNldFRpbWUoIHRvZGF5 LmdldFRpbWUoKSApOw0KCXZhciBleHBpcmVzX2RhdGUgPSBuZXcgRGF0ZSggdG9k YXkuZ2V0VGltZSgpICsgKGV4cGlyZXMgKiAxMDAwICogNjAgKiA2MCAqIDI0KSAp Ow0KCWRvY3VtZW50LmNvb2tpZSA9ICdjbXNfc3BsYXNoX3NjcmVlbj0xJyArICc7 ZXhwaXJlcz0nICsgZXhwaXJlc19kYXRlLnRvR01UU3RyaW5nKCk7DQoNCgkkKCdz cGxhc2hfb3V0Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCgkkKCdzcGxhc2gn KS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KDQp9DQovKioNCipAcGFja2FnZSBF bnZpc2lvTmV4dCBqYXZhc2NyaXB0IGxpYnJhcnkNCipAc3VicGFja2FnZSBQb3B1 cCBzdGF0aWMgd2luZG93DQoqQGNvcHlyaWdodCAoQykgMjAwNyBFbnZpc2lvTmV4 dC5jb20gIDxzdXBwb3J0QEVudmlzaW9OZXh0LmNvbT4NCipAYXV0aG9yIEFudG9u IFphdmlkb3YgPGFudG9uLnphdmlkb3ZAZW52aXNpb25leHQuY29tLnVhPg0KKi8N Cg0KLy9CYXNlIGNsYXNzDQp2YXIgcG9wVXBXaW5kb3cgPSB7DQoJLy8gSW5pdCBw b3B1cGhhbmRsZXINCgkvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcnVuIGFmdGVy IGxvYWQgZG9jdW1lbnQNCglpbml0IDogZnVuY3Rpb24oKQ0KCXsNCgkJdmFyIHBv cHVwcyA9ICQkKCIudG9vbHRpcCIpOw0KCQlmb3IodmFyIGk9MDsgaTxwb3B1cHMu bGVuZ3RoOyBpKyspew0KCQkJdmFyIGFjdGl2ZVBvcFVwRWxlbWVudCA9IHRoaXMu ZmluZChwb3B1cHNbaV0sInByZXYiKTsNCgkJCWlmKGFjdGl2ZVBvcFVwRWxlbWVu dCkNCgkJCXsNCgkJCQlFdmVudC5vYnNlcnZlKGFjdGl2ZVBvcFVwRWxlbWVudCwn Y2xpY2snLHRoaXMub3Blbik7DQoJCQl9DQoJCX0NCgl9LA0KCS8vIEZpbmQgaGFu ZGxlciBvYmplY3QNCglmaW5kIDogZnVuY3Rpb24oZWxlbWVudCxtb2RlKQ0KCXsN CgkJdmFyIHByZXYgPSB0cnVlOw0KCQljbGFzID0gKG1vZGUgPT0gInByZXYiKT8g InBvcHVwIiA6ICJ0b29sdGlwIjsNCgkJd2hpbGUoZWxlbWVudC5jbGFzc05hbWUg IT0gY2xhcyAmJiBwcmV2ID09IHRydWUpIHsNCgkJCWlmKChtb2RlID09ICJwcmV2 IiAmJiBlbGVtZW50LnByZXZpb3VzU2libGluZykgfHwgKG1vZGUgIT0gInByZXYi ICYmIGVsZW1lbnQubmV4dFNpYmxpbmcpKXsNCgkJCQllbGVtZW50ID0gKG1vZGUg PT0gInByZXYiKT8gZWxlbWVudC5wcmV2aW91c1NpYmxpbmcgOiBlbGVtZW50Lm5l eHRTaWJsaW5nOw0KCQkJfSBlbHNlIHsNCgkJCQlwcmV2ID0gZmFsc2U7DQoJCQkJ cmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBlbGVtZW50Ow0KCX0s DQoJLy8gT3Blbi9DbG9zZSBwb3B1cCB3aW5kb3cNCglvcGVuIDogZnVuY3Rpb24o KQ0KCXsNCgkJZWxlbWVudCA9IChuYXZpZ2F0b3IuYXBwTmFtZSA9PSAiTWljcm9z b2Z0IEludGVybmV0IEV4cGxvcmVyIik/RXZlbnQuZWxlbWVudChldmVudCk6dGhp czsNCgkJdmFyIHBvcFVwID0gcG9wVXBXaW5kb3cuZmluZChlbGVtZW50LCAibmV4 dCIpOw0KCQlpZihwb3BVcCkNCgkJew0KCQkJaWYocG9wVXAuc3R5bGUuZGlzcGxh eSA9PSAiIiB8fCBwb3BVcC5zdHlsZS5kaXNwbGF5ID09ICJub25lIikNCgkJCXsN CgkJCQlwb3BVcC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsNCgkJCX0gZWxzZSB7 DQoJCQkJcG9wVXAuc3R5bGUuZGlzcGxheSA9ICJub25lIjsNCgkJCX0NCgkJfQ0K CX0sDQoJLy8gQ2xvc2UgcG9wdXAgd2luZG93IGlmIGNsaWNrZWQgJ2Nsb3NlJw0K CWNsb3NlUG9wVXAgOiBmdW5jdGlvbihlbGVtZW50KQ0KCXsNCgkJZWxlbWVudC5w YXJlbnROb2RlLnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheSA9ICJub25lIjsNCgl9 DQp9DQoNCi8qKg0KKkBwYWNrYWdlIEVudmlzaW9OZXh0IGphdmFzY3JpcHQgbGli cmFyeQ0KKkBzdWJwYWNrYWdlIFRvcGxpc3QNCipAY29weXJpZ2h0IChDKSAyMDA3 IEVudmlzaW9OZXh0LmNvbSAgPHN1cHBvcnRARW52aXNpb05leHQuY29tPg0KKkBh dXRob3IgQW50b24gWmF2aWRvdiA8YW50b24uemF2aWRvdkBlbnZpc2lvbmV4dC5j b20udWE+DQoqLw0KdmFyIFRvcExpc3QgPSB7DQoJZ2xvYmFsRGl2Q2xhc3MgOiAi bGlzdCIsDQoJbGlua0NsYXNzIDogIm5hbWUiLA0KCWNvdmVySW1nIDogImNvdmVy SW1nIiwNCgljb3ZlckxpbmsgOiAiY292ZXJMaW5rIiwNCgl1cmxzMSA6IGZhbHNl LA0KCXVybHMyIDogZmFsc2UsDQoJaW1ncyA6IGZhbHNlLA0KCWluaXQgOiBmdW5j dGlvbigpDQoJew0KCQl2YXIgZWxlbWVudCA9ICQkKCJkaXYuIitUb3BMaXN0Lmds b2JhbERpdkNsYXNzKyIgYS4iK1RvcExpc3QubGlua0NsYXNzKTsNCgkJdGhpcy51 cmxzMSA9ICQkKCIuIiArIFRvcExpc3QuY292ZXJMaW5rKTsNCgkJdGhpcy51cmxz MiA9ICQkKCJkaXYuaW1nIGEubmFtZSIpOw0KCQl0aGlzLmltZ3MgPSAkJCgiLiIg KyBUb3BMaXN0LmNvdmVySW1nKTsNCgkJDQoJCWZvciAodmFyIGk9MDsgaTxlbGVt ZW50Lmxlbmd0aDsgaSsrKSB7DQoJCQlFdmVudC5vYnNlcnZlKGVsZW1lbnRbaV0s ICdtb3VzZW92ZXInLCB0aGlzLm1vdXNlT3Zlci5iaW5kQXNFdmVudExpc3RlbmVy KHRoaXMpKTsNCgkJfQ0KCX0sDQoJbW91c2VPdmVyIDogZnVuY3Rpb24oZXZlbnQp DQoJew0KCQl2YXIgZWxlbWVudCA9IEV2ZW50LmVsZW1lbnQoZXZlbnQpOw0KCQlp ZihlbGVtZW50LnRhZ05hbWUhPSJBIil7DQoJCQllbGVtZW50ID0gZWxlbWVudC5w YXJlbnROb2RlOw0KCQl9DQoJCXRoaXMudXJsczFbMF0uaHJlZiA9IGVsZW1lbnQu aHJlZjsNCgkJdGhpcy51cmxzMVsxXS5ocmVmID0gZWxlbWVudC5ocmVmOw0KCQl0 aGlzLnVybHMyWzBdLmhyZWYgPSBlbGVtZW50LmhyZWY7DQoJCXRoaXMudXJsczJb MV0uaHJlZiA9IGVsZW1lbnQuaHJlZjsNCgkJdmFyIGRpdiA9IGVsZW1lbnQubmV4 dFNpYmxpbmc7DQoJCWlmKCFkaXYpZGl2ID0gZWxlbWVudC5wYXJlbnROb2RlLm5l eHRTaWJsaW5nOw0KCQkJdHJ5ew0KCQkJCXRoaXMuaW1nc1swXS5zcmMgPSBkaXYu Y2hpbGROb2Rlc1swXS5zcmM7DQoJCQkJdGhpcy5pbWdzWzFdLnNyYyA9IGRpdi5j aGlsZE5vZGVzWzFdLnNyYzsNCgkJCX0gY2F0Y2goZSl7DQoJCQkJdmFyIGRpdiA9 IGVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlLm5leHRTaWJsaW5nOw0KCQkJ CXRyeXsNCgkJCQkJdGhpcy5pbWdzWzBdLnNyYyA9IGRpdi5jaGlsZE5vZGVzWzBd LnNyYzsNCgkJCQkJdGhpcy5pbWdzWzFdLnNyYyA9IGRpdi5jaGlsZE5vZGVzWzFd LnNyYzsNCgkJCQl9IGNhdGNoKGUpe30NCgkJCX0NCgl9DQp9DQoNCi8vIERlYnVn IFdpbmRvdw0KdmFyIGRidyA9IGZ1bmN0aW9uKGVsZW1lbnQpDQp7DQoJdmFyIGQ9 IiI7DQoJZm9yKGYgaW4gZWxlbWVudCkgew0KCQl0cnkNCgkJew0KCQkJZCs9Zisi PSIrZWxlbWVudChmKSsiXG4iOw0KCQl9IA0KCQljYXRjaChlKQ0KCQl7DQoJCQlj b250aW51ZTsNCgkJfQ0KCX0NCglteVcgPSBvcGVuKCIiLCAiZGlzcGxheVdpbmRv dyIsICJzdGF0dXM9bm8sdG9vbGJhcj1ubyxtZW51YmFyPXllcyIpOw0KCW15Vy5k b2N1bWVudC5vcGVuKCk7DQoJbXlXLmRvY3VtZW50LndyaXRlKCI8aHRtbD48Ym9k eT48dGV4dGFyZWEgc3R5bGU9J3dpZHRoOiA1MDBweDsgaGVpZ3RoOiA1MDBweCc+ IitkKyI8L3RleHRhcmVhPjwvYm9keT48L2h0bWw+Iik7DQoJbXlXLmRvY3VtZW50 LmNsb3NlKCk7DQoJDQp9DQovKioNCipAcGFja2FnZSBFbnZpc2lvTmV4dCBqYXZh c2NyaXB0IGxpYnJhcnkNCipAc3VicGFja2FnZSBMaXN0VXANCipAY29weXJpZ2h0 IChDKSAyMDA3IEVudmlzaW9OZXh0LmNvbSAgPHN1cHBvcnRARW52aXNpb05leHQu Y29tPg0KKkBhdXRob3IgQW50b24gWmF2aWRvdiA8YW50b24uemF2aWRvdkBlbnZp c2lvbmV4dC5jb20udWE+DQoqLw0KdmFyIExpc3RVcCA9IHsNCglpbml0IDogZnVu Y3Rpb24oKQ0KCXsNCgkJaWYoJCgnUmVsYXRlZEl0ZW1zVmlld0lkRHJpdmVyJykg JiYgJCgnUmVsYXRlZEl0ZW1zVmlld0lkJykgJiYgJCgnUmVsYXRlZEl0ZW1zVmll d0lkU2VsZWN0Jykpew0KCQkJRXZlbnQub2JzZXJ2ZSgkKCdSZWxhdGVkSXRlbXNW aWV3SWREcml2ZXInKSwgJ2NsaWNrJywgdGhpcy5SZWxhdGVkSXRlbXNWaWV3SWRE cml2ZXIuYmluZEFzRXZlbnRMaXN0ZW5lcih0aGlzKSk7DQoJCQkvL0V2ZW50Lm9i c2VydmUoJCgnUmVsYXRlZEl0ZW1zVmlld0lkU2VsZWN0JyksICdjaGFuZ2UnLCB0 aGlzLlJlbGF0ZWRJdGVtc1ZpZXdJZFNlbGVjdC5iaW5kQXNFdmVudExpc3RlbmVy KHRoaXMpKTsNCgkJCXRoaXMuc2VsZWN0cygkKCdSZWxhdGVkSXRlbXNWaWV3SWRT ZWxlY3QnKSwnUmVsYXRlZEl0ZW1zVmlldycpOw0KCQkJdGhpcy5oaWRkZW5FbCgn UmVsYXRlZEl0ZW1zVmlld0lkJywnUmVsYXRlZEl0ZW1zVmlldycpOw0KCQkJJCgn UmVsYXRlZEl0ZW1zVmlld0lkJykuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7DQoJ CX0NCgkJaWYoJCgnUmVsYXRlZFBob3RvSXRlbXNWaWV3SWREcml2ZXInKSAmJiAk KCdSZWxhdGVkUGhvdG9JdGVtc1ZpZXdJZCcpICYmICQoJ1JlbGF0ZWRQaG90b0l0 ZW1zVmlld0lkU2VsZWN0Jykpew0KCQkJRXZlbnQub2JzZXJ2ZSgkKCdSZWxhdGVk UGhvdG9JdGVtc1ZpZXdJZERyaXZlcicpLCAnY2xpY2snLCB0aGlzLlJlbGF0ZWRQ aG90b0l0ZW1zVmlld0lkRHJpdmVyLmJpbmRBc0V2ZW50TGlzdGVuZXIodGhpcykp Ow0KCQkJLy9FdmVudC5vYnNlcnZlKCQoJ1JlbGF0ZWRQaG90b0l0ZW1zVmlld0lk U2VsZWN0JyksICdjaGFuZ2UnLCB0aGlzLlJlbGF0ZWRQaG90b0l0ZW1zVmlld0lk U2VsZWN0LmJpbmRBc0V2ZW50TGlzdGVuZXIodGhpcykpOw0KCQkJdGhpcy5zZWxl Y3RzKCQoJ1JlbGF0ZWRQaG90b0l0ZW1zVmlld0lkU2VsZWN0JyksJ1JlbGF0ZWRQ aG90b0l0ZW1zVmlldycpOw0KCQkJdGhpcy5oaWRkZW5FbCgnUmVsYXRlZFBob3Rv SXRlbXNWaWV3SWQnLCdSZWxhdGVkUGhvdG9JdGVtc1ZpZXcnKTsNCgkJCSQoJ1Jl bGF0ZWRQaG90b0l0ZW1zVmlld0lkJykuZGlzcGxheSA9ICJibG9jayI7DQoJCX0N Cgl9LA0KCVJlbGF0ZWRJdGVtc1ZpZXdJZERyaXZlciA6IGZ1bmN0aW9uKCkNCgl7 DQoJCXZhciBlbCA9ICQoJ1JlbGF0ZWRJdGVtc1ZpZXdJZCcpOw0KCQl0aGlzLmhp ZGRlbkVsKCdSZWxhdGVkSXRlbXNWaWV3SWQnLCdSZWxhdGVkSXRlbXNWaWV3Jyk7 DQoJCWlmKGVsLnN0eWxlLmRpc3BsYXkgPT0gIiIgfHwgZWwuc3R5bGUuZGlzcGxh eSA9PSAiYmxvY2siKSB7DQoJCQllbC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOw0K CQkJJCgnUmVsYXRlZEl0ZW1zVmlld0lkRHJpdmVyJykuY2xhc3NOYW1lID0gJCgn UmVsYXRlZEl0ZW1zVmlld0lkRHJpdmVyJykuY2xhc3NOYW1lLnNwbGl0KCIgIilb MF0rIiBjb2xsYXBzZSI7DQoJCX0gZWxzZSB7DQoJCQllbC5zdHlsZS5kaXNwbGF5 ID0gImJsb2NrIjsNCgkJCSQoJ1JlbGF0ZWRJdGVtc1ZpZXdJZERyaXZlcicpLmNs YXNzTmFtZSA9ICQoJ1JlbGF0ZWRJdGVtc1ZpZXdJZERyaXZlcicpLmNsYXNzTmFt ZS5zcGxpdCgiICIpWzBdKyIgZXhwYW5kIjsNCgkJfQ0KCX0sDQoJUmVsYXRlZFBo b3RvSXRlbXNWaWV3SWREcml2ZXIgOiBmdW5jdGlvbigpDQoJew0KCQl2YXIgZWwg PSAkKCdSZWxhdGVkUGhvdG9JdGVtc1ZpZXdJZCcpOw0KCQl0aGlzLmhpZGRlbkVs KCdSZWxhdGVkUGhvdG9JdGVtc1ZpZXdJZCcsJ1JlbGF0ZWRQaG90b0l0ZW1zVmll dycpOw0KCQlpZihlbC5zdHlsZS5kaXNwbGF5ID09ICIiIHx8IGVsLnN0eWxlLmRp c3BsYXkgPT0gImJsb2NrIikgew0KCQkJZWwuc3R5bGUuZGlzcGxheSA9ICJub25l IjsNCgkJCSQoJ1JlbGF0ZWRQaG90b0l0ZW1zVmlld0lkRHJpdmVyJykuY2xhc3NO YW1lID0gJCgnUmVsYXRlZFBob3RvSXRlbXNWaWV3SWREcml2ZXInKS5jbGFzc05h bWUuc3BsaXQoIiAiKVswXSsiIGNvbGxhcHNlIjsNCgkJfSBlbHNlIHsNCgkJCWVs LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOw0KCQkJJCgnUmVsYXRlZFBob3RvSXRl bXNWaWV3SWREcml2ZXInKS5jbGFzc05hbWUgPSAkKCdSZWxhdGVkUGhvdG9JdGVt c1ZpZXdJZERyaXZlcicpLmNsYXNzTmFtZS5zcGxpdCgiICIpWzBdKyIgZXhwYW5k IjsNCgkJfQ0KCX0sDQoJUmVsYXRlZEl0ZW1zVmlld0lkU2VsZWN0IDogZnVuY3Rp b24oZWwpDQoJew0KCQl2YXIgdmFsdWUgPSBlbC52YWx1ZTsNCgkJc2V0U2V0dGlu Z3MoJ1JlbGF0ZWRJdGVtc1ZpZXcnLHZhbHVlKTsNCgkJdGhpcy5oaWRkZW5FbCgn UmVsYXRlZEl0ZW1zVmlld0lkJywnUmVsYXRlZEl0ZW1zVmlldycpOw0KCX0sDQoJ UmVsYXRlZFBob3RvSXRlbXNWaWV3SWRTZWxlY3QgOiBmdW5jdGlvbihlbCkNCgl7 DQoJCXZhciB2YWx1ZSA9IGVsLnZhbHVlOw0KCQlzZXRTZXR0aW5ncygnUmVsYXRl ZFBob3RvSXRlbXNWaWV3Jyx2YWx1ZSk7DQoJCXRoaXMuaGlkZGVuRWwoJ1JlbGF0 ZWRQaG90b0l0ZW1zVmlld0lkJywnUmVsYXRlZFBob3RvSXRlbXNWaWV3Jyk7DQoJ fSxoaWRkZW5FbCA6IGZ1bmN0aW9uKGVsLGNvb2spDQoJewkJDQoJCXZhciBudW0g PSBnZXRTZXR0aW5ncyhjb29rKTsNCgkJaWYobnVtIT1udWxsKXsNCgkJCW51bSA9 IHBhcnNlSW50KG51bSk7DQoJCX0gZWxzZSB7DQoJCQludW09d2luZG93LmRlZmF1 bHROdW07DQoJCQlzZXRTZXR0aW5ncygnUmVsYXRlZFBob3RvSXRlbXNWaWV3Jyxu dW0pOw0KCQl9DQoJCXZhciBlbGVtZW50cyA9ICQkKCIjIitlbCsiIGRpdi5pdGVt Iik7DQoJCWZvcih2YXIgaT0wOyBpPGVsZW1lbnRzLmxlbmd0aDsgaSsrKXsNCgkJ CWlmKGk+PW51bSkgew0KCQkJCWVsZW1lbnRzW2ldLnN0eWxlLmRpc3BsYXk9Im5v bmUiOw0KCQkJfSBlbHNlIHsNCgkJCQllbGVtZW50c1tpXS5zdHlsZS5kaXNwbGF5 PSJibG9jayI7DQoJCQl9DQoJCX0NCgl9LC8qDQoJaGlkZGVuRWwgOiBmdW5jdGlv bihlbCxjb29rKQ0KCXsJCQ0KCQl2YXIgbnVtID0gZ2V0U2V0dGluZ3MoY29vayk7 DQoJCWlmKG51bSE9bnVsbCl7DQoJCQludW0gPSBwYXJzZUludChudW0pOw0KCQkJ dmFyIGVsZW1lbnRzID0gJCQoIiMiK2VsKyIgZGl2Lml0ZW0iKTsNCgkJCWZvcih2 YXIgaT0wOyBpPGVsZW1lbnRzLmxlbmd0aDsgaSsrKXsNCgkJCQlpZihpPj1udW0p IHsNCgkJCQkJZWxlbWVudHNbaV0uc3R5bGUuZGlzcGxheT0ibm9uZSI7DQoJCQkJ fSBlbHNlIHsNCgkJCQkJZWxlbWVudHNbaV0uc3R5bGUuZGlzcGxheT0iYmxvY2si Ow0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0sKi8NCgkvKnNlbGVjdHMgOiBmdW5jdGlv bihzZSxjb29rKQ0KCXsNCgkJdmFyIG51bSA9IGdldFNldHRpbmdzKGNvb2spOw0K CQludW0gPSAoIW51bSk/d2luZG93LmRlZmF1bHROdW06bnVtOw0KCQlmb3IodmFy IGk9MDsgaTxzZS5vcHRpb25zLmxlbmd0aDsgaSsrKXsNCgkJCWlmKHBhcnNlSW50 KHNlLm9wdGlvbnNbaV0udmFsdWUpID09IHBhcnNlSW50KG51bSkpew0KCQkJCXNl Lm9wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlOw0KCQkJCXJldHVybjsNCgkJCX0N CgkJfQ0KCX0NCn0qL3NlbGVjdHMgOiBmdW5jdGlvbihzZSxjb29rKQ0KCXsNCgkJ dmFyIG51bSA9IGdldFNldHRpbmdzKGNvb2spOw0KCQlpZihudW0hPW51bGwpew0K CQkJbnVtID0gcGFyc2VJbnQobnVtKTsNCgkJfSBlbHNlIHsNCgkJCW51bSA9ICgh bnVtKT93aW5kb3cuZGVmYXVsdE51bTpudW07DQoJCQlzZXRTZXR0aW5ncygnUmVs YXRlZFBob3RvSXRlbXNWaWV3JyxudW0pOw0KCQl9DQoJCS8qZm9yKHZhciBpPTA7 IGk8c2Uub3B0aW9ucy5sZW5ndGg7IGkrKyl7DQoJCQlpZihwYXJzZUludChzZS5v cHRpb25zW2ldLnZhbHVlKSA9PSBwYXJzZUludChudW0pKXsNCgkJCQlzZS5vcHRp b25zW2ldLnNlbGVjdGVkID0gdHJ1ZTsNCgkJCQlyZXR1cm47DQoJCQl9DQoJCX0q Lw0KCQlzZS51cCgnZGwnKS5kb3duKCdkdCcpLmlubmVySFRNTCA9IG51bTsNCgl9 DQp9DQoNCi8qTmV3IFZvdGUqLw0KdXBkYXRlUmF0aW5nID0gZnVuY3Rpb24odm90 ZU9iaikgew0KCSQkKCcudm90ZV8nK3ZvdGVPYmouY2lkKS5lYWNoKGZ1bmN0aW9u KGJsb2NrKXsNCgkJYmxvY2suc2VsZWN0KCdiJykuZWFjaChmdW5jdGlvbihvYmos aW5kZXgpew0KCQkJaWYgKGluZGV4KzE8PXZvdGVPYmoudm90ZVRvdGFsKSBvYmou YWRkQ2xhc3NOYW1lKCdhY3RpdmUnKTsNCgkJCWVsc2Ugb2JqLnJlbW92ZUNsYXNz TmFtZSgnYWN0aXZlJyk7DQoJCQlpZiAoaW5kZXgrMTw9dm90ZU9iai52b3RlVXNl cikgb2JqLmFkZENsYXNzTmFtZSgndXNlclJhdGluZycpOw0KCQkJZWxzZSBvYmou cmVtb3ZlQ2xhc3NOYW1lKCd1c2VyUmF0aW5nJyk7DQoJCQlFdmVudC5zdG9wT2Jz ZXJ2aW5nKG9iaiwgJ2NsaWNrJyk7DQoJCQlFdmVudC5vYnNlcnZlKG9iaiwnY2xp Y2snLGZ1bmN0aW9uKGV2ZW50KXsNCgkJCQlpZiAoIXZvdGVPYmouYWxsb3dWb3Rp bmcpIHJldHVybjsNCgkJCQlpZiAoIXdpbmRvdy51c2VySWQgfHwgd2luZG93LnVz ZXJJZCA8IDEpIHtkb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gKHdpbmRvdy5qb2lu VXJsKSA/IHdpbmRvdy5qb2luVXJsIDogJy8nOyByZXR1cm59DQoJCQkJaWYgKHZv dGVPYmouZGlzYWJsZVZvdGluZykge2RvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSAn Lyc7IHJldHVybjt9DQoJCQkJdmFyIG9wdCA9IHsNCgkJCQkJbWV0aG9kOiAncG9z dCcsDQoJCQkJCXBvc3RCb2R5OiAnbW9kZV9hamF4PXRydWUmVXNlclZvdGVzX2Fj dGlvbj11c2VyVm90ZSZVc2VyVm90ZXNfY2lkPScrdm90ZU9iai5jaWQrJyZVc2Vy Vm90ZXNfdm90ZT0nKyhpbmRleCsxKSwNCgkJCQkJb25TdWNjZXNzOiBmdW5jdGlv bih0KSB7DQoJCQkJCQl2YXIgZG9jdW1lbnRCb2R5ID0gZG9jdW1lbnQuZ2V0RWxl bWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXTsNCgkJCQkJCXZhciBkaXYgPSBkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCgkJCQkJCWRpdi5pbm5lckhUTUwg PSB0LnJlc3BvbnNlVGV4dDsNCgkJCQkJCWNsZWFyQ2FjaGUoKTsNCgkJCQkJCWRv Y3VtZW50Qm9keS5hcHBlbmRDaGlsZChkaXYpOw0KCQkJCQkJdm90ZU9iai52b3Rl VG90YWwgPSAkRigkKCd2b3RlVG90YWxfJyt2b3RlT2JqLmNpZCkpOw0KCQkJCQkJ dm90ZU9iai52b3RlVXNlciA9ICRGKCQoJ3ZvdGVVc2VyXycrdm90ZU9iai5jaWQp KTsNCgkJCQkJCXdpbmRvdy51cGRhdGVSYXRpbmcodm90ZU9iaik7DQoJCQkJCQlk b2N1bWVudEJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsNCgkJCQkJfSwNCgkJCQkJb25G YWlsdXJlOiBmdW5jdGlvbih0KSB7fQ0KCQkJCX0NCgkJCQluZXcgQWpheC5SZXF1 ZXN0KCd1c2Vydm90ZXMucGhwPycsIG9wdCk7DQoJCQkJRXZlbnQuc3RvcChldmVu dCk7DQoJCQl9KTsNCgkJfSk7DQoJfSk7DQp9DQoNCi8qKg0KKkBwYWNrYWdlIEVu dmlzaW9OZXh0IGphdmFzY3JpcHQgbGlicmFyeQ0KKkBzdWJwYWNrYWdlIENvb2tp ZXMNCipAY29weXJpZ2h0IChDKSAyMDA3IEVudmlzaW9OZXh0LmNvbSAgPHN1cHBv cnRARW52aXNpb05leHQuY29tPg0KKkBhdXRob3IgQW50b24gWmF2aWRvdiA8YW50 b24uemF2aWRvdkBlbnZpc2lvbmV4dC5jb20udWE+DQoqLw0KdmFyIHNldFNldHRp bmdzID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpDQp7DQoJZG9jdW1lbnQuY29va2ll ID0gbmFtZSArICI9IiArIGVzY2FwZSh2YWx1ZSkgKw0KICAgICAgCSI7IGV4cGly ZXM9TW9uLCAwMS1KYW4tMjAxNyAwMDowMDowMCBHTVQiICsNCiAgICAgIAkiOyBw YXRoPS8iOw0KfQ0KdmFyIGdldFNldHRpbmdzID0gZnVuY3Rpb24obmFtZSkNCnsN Cgl2YXIgY29va2llID0gIiAiICsgZG9jdW1lbnQuY29va2llOw0KCXZhciBzZWFy Y2ggPSAiICIgKyBuYW1lICsgIj0iOw0KCXZhciBzZXRTdHIgPSBudWxsOw0KICAg CXZhciBvZmZzZXQgPSAwOw0KICAgIHZhciBlbmQgPSAwOw0KICAgIGlmIChjb29r aWUubGVuZ3RoID4gMCkNCgl7DQoJCW9mZnNldCA9IGNvb2tpZS5pbmRleE9mKHNl YXJjaCk7DQoJCWlmIChvZmZzZXQgIT0gLTEpDQoJCXsNCgkJCW9mZnNldCArPSBz ZWFyY2gubGVuZ3RoOw0KCQkJZW5kID0gY29va2llLmluZGV4T2YoIjsiLCBvZmZz ZXQpDQoJCQlpZiAoZW5kID09IC0xKQ0KCQkJew0KCQkJCWVuZCA9IGNvb2tpZS5s ZW5ndGg7DQoJCQl9DQoJCQlzZXRTdHIgPSB1bmVzY2FwZShjb29raWUuc3Vic3Ry aW5nKG9mZnNldCwgZW5kKSk7DQoJCX0NCgl9DQoJcmV0dXJuKHNldFN0cik7DQp9 DQovKioNCipAcGFja2FnZSBFbnZpc2lvTmV4dCBqYXZhc2NyaXB0IGxpYnJhcnkN CipAc3VicGFja2FnZSBGbGFzaCBUYWJzDQoqQGNvcHlyaWdodCAoQykgMjAwNyBF bnZpc2lvTmV4dC5jb20gIDxzdXBwb3J0QEVudmlzaW9OZXh0LmNvbT4NCipAYXV0 aG9yIEFudG9uIFphdmlkb3YgPGFudG9uLnphdmlkb3ZAZW52aXNpb25leHQuY29t LnVhPg0KKi8NCnZhciBGbGFzaFRhYnMgPSB7DQoJZm9ybWF0cyA6IHsNCgkJLy8g RXhhbXBsZQ0KCQkvLyJkdmQiOlt4LHksbW9kZSxmbHZGb2xkZXIsZmx2TmFtZSxw cm92aWRlck5hbWVdOw0KCQkiZHZkIjpbNjQ4LDQ3OCwwLCJ0b3VyX21vdmllcy8i LCI2NDAuZmx2Il0sDQoJCSJoaWdoIjpbNDg4LDM3MiwxLCJ0b3VyX21vdmllcy8i LCI0ODAuZmx2Il0sDQoJCSJtZWRpdW0iOlszMjgsMjY1LDIsInRvdXJfbW92aWVz LyIsIjMyMC5mbHYiXSwNCgkJImxvdyI6WzE5MiwxNDQsMywidG91cl9tb3ZpZXMv Il0NCgl9LA0KCWluaXQgOiBmdW5jdGlvbigpDQoJew0KCQl2YXIgbGlzID0gJCQo J2Rpdi5kb3dubG9hZF9kdmRfZmxhc2ggbGknKTsNCgkJZm9yICh2YXIgaT0wOyBp PGxpcy5sZW5ndGg7IGkrKykgew0KCQkJRXZlbnQub2JzZXJ2ZShsaXNbaV0sICdj bGljaycsIHRoaXMuY2xpY2suYmluZEFzRXZlbnRMaXN0ZW5lcih0aGlzKSk7DQoJ CX0NCgkJdmFyIGFjdGl2ZSA9ICQkKCdkaXYuZG93bmxvYWRfZHZkX2ZsYXNoIGxp LmFjdGl2ZScpOw0KCQlpZihhY3RpdmVbMF0pew0KCQkJdmFyIGNsYXMgPSBhY3Rp dmVbMF0uaWQ7DQoJCQl2YXIgZm9ybWF0ID0gdGhpcy5mb3JtYXRzW2NsYXNdOw0K CQkJaWYoIWZvcm1hdCl7DQoJCQkJcmV0dXJuOw0KCQkJfQ0KCQkJdmFyIGRpdiA9 ICQoImZyZWVfdG91cl9wbGF5ZXIiKTsNCgkJCWRpdi5zdHlsZS53aWR0aCA9IGZv cm1hdFswXSArICJweCI7DQoJCQlkaXYuc3R5bGUuaGVpZ2h0ID0gZm9ybWF0WzFd ICsgInB4IjsNCgkJCXRoaXMuY29ycmVjdEhlaWdodChmb3JtYXRbMV0sIGRpdik7 DQoJCQlmbGFzaFN0YXJ0KGZvcm1hdFs1XSxmb3JtYXRbM10sZm9ybWF0WzRdKTsN CgkJfQ0KCX0sDQoJY2xpY2sgOiBmdW5jdGlvbihldmVudCkNCgl7DQoJCXZhciBl bGVtZW50ID0gRXZlbnQuZWxlbWVudChldmVudCk7DQoJCXZhciBjbGFzID0gZWxl bWVudC5pZDsNCgkJaWYoIWNsYXMpIHsNCgkJCXJldHVybjsNCgkJfQ0KCQl2YXIg Zm9ybWF0ID0gdGhpcy5mb3JtYXRzW2NsYXNdOw0KCQlpZighZm9ybWF0KXsNCgkJ CXJldHVybjsNCgkJfQ0KCQl2YXIgYWN0aXZlID0gJCQoJ2Rpdi5kb3dubG9hZF9k dmRfZmxhc2ggbGkuYWN0aXZlJyk7DQoJCWlmKGFjdGl2ZVswXSl7DQoJCQlhY3Rp dmVbMF0uY2xhc3NOYW1lID0gIiI7IA0KCQl9DQoJCWVsZW1lbnQuY2xhc3NOYW1l ID0gImFjdGl2ZSI7DQoJCXZhciBkaXYgPSAkKCJmcmVlX3RvdXJfcGxheWVyIik7 DQoJCWRpdi5zdHlsZS53aWR0aCA9IGZvcm1hdFswXSArICJweCI7DQoJCWRpdi5z dHlsZS5oZWlnaHQgPSBmb3JtYXRbMV0gKyAicHgiOw0KCQl0aGlzLmNvcnJlY3RI ZWlnaHQoZm9ybWF0WzFdLCBkaXYpOw0KCQllbl9mbGFzaF9zZW5kVG9QbGF5ZXIo Zm9ybWF0WzJdLGZvcm1hdFs1XSxmb3JtYXRbM10sZm9ybWF0WzRdKTsNCgl9LA0K CWNvcnJlY3RIZWlnaHQgOiBmdW5jdGlvbihoZWlnaHQsZGl2KQ0KCXsNCgkJdmFy IGNvdmVyID0gJCQoJ2Rpdi5kb3dubG9hZF9kdmRfZmxhc2ggZGl2Lm1haW5fZmxh c2gnKTsNCgkJaWYoIWNvdmVyKXsNCgkJCXJldHVybg0KCQl9IGVsc2UgY292ZXIg PSBjb3ZlclswXTsNCgkJZGl2LnN0eWxlLnBhZGRpbmdUb3AgPSBwYXJzZUludCgo NDg1LWhlaWdodCkvMikrInB4IjsNCgl9DQp9DQovLy8vDQp2YXIgYm9keUhlaWdo dCA9IGZ1bmN0aW9uKCkgeyANCgl2YXIgYm9keSA9ICQkKCdib2R5JylbMF07DQoJ Ym9keS5zdHlsZS5oZWlnaHQgPSAnYXV0byc7DQoJdmFyIHdpbkhlaWdodCA9IChk b2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0P2RvY3VtZW50LmRv Y3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgOglkb2N1bWVudC5ib2R5LmNsaWVu dEhlaWdodCk7DQoJYm9keS5zdHlsZS5oZWlnaHQgPSBib2R5Lm9mZnNldEhlaWdo dCA+IHdpbkhlaWdodCA/ICdhdXRvJyA6ICcxMDAlJzsgDQp9Ow0KDQpmdW5jdGlv biBzZXRDb29raWUobmFtZSwgdmFsdWUpIHsNCiAgICAgIHZhciB2YWx1ZUVzY2Fw ZWQgPSBlc2NhcGUodmFsdWUpOw0KICAgICAgdmFyIGV4cGlyZXNEYXRlID0gbmV3 IERhdGUoKTsNCiAgICAgIGV4cGlyZXNEYXRlLnNldFRpbWUoZXhwaXJlc0RhdGUu Z2V0VGltZSgpICsgMzY1ICogMjQgKiA2MCAqIDYwICogMTAwMCk7DQogICAgICB2 YXIgZXhwaXJlcyA9IGV4cGlyZXNEYXRlLnRvR01UU3RyaW5nKCk7DQogICAgICB2 YXIgbmV3Q29va2llID0gbmFtZSArICI9IiArIHZhbHVlRXNjYXBlZCArICI7IHBh dGg9LzsgZXhwaXJlcz0iICsgZXhwaXJlczsNCiAgICAgIGlmICh2YWx1ZUVzY2Fw ZWQubGVuZ3RoIDw9IDQwMDApIGRvY3VtZW50LmNvb2tpZSA9IG5ld0Nvb2tpZSAr ICI7IjsNCn0NCg0KZnVuY3Rpb24gZ2V0Q29va2llKG5hbWUpIHsNCiAgICAgIHZh ciBwcmVmaXggPSBuYW1lICsgIj0iOw0KICAgICAgdmFyIGNvb2tpZVN0YXJ0SW5k ZXggPSBkb2N1bWVudC5jb29raWUuaW5kZXhPZihwcmVmaXgpOw0KICAgICAgaWYg KGNvb2tpZVN0YXJ0SW5kZXggPT0gLTEpIHJldHVybiBudWxsOw0KICAgICAgdmFy IGNvb2tpZUVuZEluZGV4ID0gZG9jdW1lbnQuY29va2llLmluZGV4T2YoIjsiLCBj b29raWVTdGFydEluZGV4ICsgcHJlZml4Lmxlbmd0aCk7DQogICAgICBpZiAoY29v a2llRW5kSW5kZXggPT0gLTEpIGNvb2tpZUVuZEluZGV4ID0gZG9jdW1lbnQuY29v a2llLmxlbmd0aDsNCiAgICAgIHJldHVybiB1bmVzY2FwZShkb2N1bWVudC5jb29r aWUuc3Vic3RyaW5nKGNvb2tpZVN0YXJ0SW5kZXggKyBwcmVmaXgubGVuZ3RoLCBj b29raWVFbmRJbmRleCkpOw0KfQ0KDQpmdW5jdGlvbiBzZXRTdHJlYW1UYWIgKGlk KXsNCgkJc2V0Q29va2llKCdTdHJlYW1UYWInLCBpZCk7DQp9DQoNCi8qc2VuZCBD b250ZW50IEVycm9yKi8NCmZ1bmN0aW9uIHNlbmRDb250ZW50RXJyb3Iob2JqKSB7 DQoJdmFyIG9iaiA9IG9iaiB8fCBuZXcgT2JqZWN0KCk7DQoJdmFyIGRhdGEgPSB7 DQoJCWNvZGUgOiBvYmouY29kZSB8fCA0MDQsDQoJCXVybCA6IG9iai51cmwgfHwg bnVsbA0KCX0NCgl2YXIgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdp ZnJhbWUnKTsNCgl3aXRoIChmcmFtZSkgew0KCQlzcmMgPSBkb2N1bWVudC5sb2Nh dGlvbi5wcm90b2NvbCArICcvLycgKyBkb2N1bWVudC5sb2NhdGlvbi5ob3N0ICsg Jy9sb2dFcnJvci9jb250ZW50RXJyb3IuaHRtbD9jb2RlPScgKyBkYXRhLmNvZGUg KyAoZGF0YS51cmwgPyAnJnVybD0nK2VzY2FwZShkYXRhLnVybCkgOiAnJyk7DQoJ CXdpdGggKHN0eWxlKSB7DQoJCQlwb3NpdGlvbiA9ICdhYnNvbHV0ZSc7DQoJCQl0 b3AgPSAnLTEwMDAwcHgnOw0KCQkJbGVmdCA9ICctMTAwMDBweCc7DQoJCQl3aWR0 aCA9ICcwJzsNCgkJCWhlaWdodCA9ICcwJzsNCgkJCXZpc2liaWxpdHkgPSAnaGlk ZGVuJzsNCgkJfQ0KCQl2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCl7ZG9jdW1lbnQu Ym9keS5yZW1vdmVDaGlsZChmcmFtZSk7fTsNCgkJaWYgKGRvY3VtZW50LmFkZEV2 ZW50TGlzdGVuZXIpIGFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBoYW5kbGVyLCBm YWxzZSkNCgkJZWxzZSBhdHRhY2hFdmVudCgnb25sb2FkJywgaGFuZGxlcik7DQoJ fQ0KCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWUpOw0KfQ0KdXBkYXRl UmF0aW5nID0gZnVuY3Rpb24odm90ZU9iaikgew0KCSQkKCcudm90ZV8nK3ZvdGVP YmouY2lkKS5lYWNoKGZ1bmN0aW9uKGJsb2NrKXsNCgkJYmxvY2suc2VsZWN0KCdi JykuZWFjaChmdW5jdGlvbihvYmosaW5kZXgpew0KCQkJaWYgKGluZGV4KzE8PXZv dGVPYmoudm90ZVRvdGFsKSBvYmouYWRkQ2xhc3NOYW1lKCdhY3RpdmUnKTsNCgkJ CWVsc2Ugb2JqLnJlbW92ZUNsYXNzTmFtZSgnYWN0aXZlJyk7DQoJCQlpZiAoaW5k ZXgrMTw9dm90ZU9iai52b3RlVXNlcikgb2JqLmFkZENsYXNzTmFtZSgndXNlclJh dGluZycpOw0KCQkJZWxzZSBvYmoucmVtb3ZlQ2xhc3NOYW1lKCd1c2VyUmF0aW5n Jyk7DQoJCQlFdmVudC5zdG9wT2JzZXJ2aW5nKG9iaiwgJ2NsaWNrJyk7DQoJCQlF dmVudC5vYnNlcnZlKG9iaiwnY2xpY2snLGZ1bmN0aW9uKGV2ZW50KXsNCgkJCQlp ZiAoIXZvdGVPYmouYWxsb3dWb3RpbmcpIHJldHVybjsNCgkJCQlpZiAoIXdpbmRv dy51c2VySWQgfHwgd2luZG93LnVzZXJJZCA8IDEpIHtkb2N1bWVudC5sb2NhdGlv bi5ocmVmID0gKHdpbmRvdy5qb2luVXJsKSA/IHdpbmRvdy5qb2luVXJsIDogJy8n OyByZXR1cm59DQoJCQkJaWYgKHZvdGVPYmouZGlzYWJsZVZvdGluZykge2RvY3Vt ZW50LmxvY2F0aW9uLmhyZWYgPSAnLyc7IHJldHVybjt9DQoJCQkJdmFyIG9wdCA9 IHsNCgkJCQkJbWV0aG9kOiAncG9zdCcsDQoJCQkJCXBvc3RCb2R5OiAnbW9kZV9h amF4PXRydWUmVXNlclZvdGVzX2FjdGlvbj11c2VyVm90ZSZVc2VyVm90ZXNfY2lk PScrdm90ZU9iai5jaWQrJyZVc2VyVm90ZXNfdm90ZT0nKyhpbmRleCsxKSwNCgkJ CQkJb25TdWNjZXNzOiBmdW5jdGlvbih0KSB7DQoJCQkJCQl2YXIgZG9jdW1lbnRC b2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXTsN CgkJCQkJCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsN CgkJCQkJCWRpdi5pbm5lckhUTUwgPSB0LnJlc3BvbnNlVGV4dDsNCgkJCQkJCWNs ZWFyQ2FjaGUoKTsNCgkJCQkJCWRvY3VtZW50Qm9keS5hcHBlbmRDaGlsZChkaXYp Ow0KCQkJCQkJdm90ZU9iai52b3RlVG90YWwgPSAkRigkKCd2b3RlVG90YWxfJyt2 b3RlT2JqLmNpZCkpOw0KCQkJCQkJdm90ZU9iai52b3RlVXNlciA9ICRGKCQoJ3Zv dGVVc2VyXycrdm90ZU9iai5jaWQpKTsNCgkJCQkJCXdpbmRvdy51cGRhdGVSYXRp bmcodm90ZU9iaik7DQoJCQkJCQlkb2N1bWVudEJvZHkucmVtb3ZlQ2hpbGQoZGl2 KTsNCgkJCQkJfSwNCgkJCQkJb25GYWlsdXJlOiBmdW5jdGlvbih0KSB7fQ0KCQkJ CX0NCgkJCQluZXcgQWpheC5SZXF1ZXN0KCd1c2Vydm90ZXMucGhwPycsIG9wdCk7 DQoJCQkJRXZlbnQuc3RvcChldmVudCk7DQoJCQl9KTsNCgkJfSk7DQoJfSk7DQp9 DQoNCmZ1bmN0aW9uIEdldF9Db29raWUoIGNoZWNrX25hbWUgKSB7DQoJdmFyIGFf YWxsX2Nvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoICc7JyApOw0KCXZh ciBhX3RlbXBfY29va2llID0gJyc7DQoJdmFyIGNvb2tpZV9uYW1lID0gJyc7DQoJ dmFyIGNvb2tpZV92YWx1ZSA9ICcnOw0KCXZhciBiX2Nvb2tpZV9mb3VuZCA9IGZh bHNlOyAvLyBzZXQgYm9vbGVhbiB0L2YgZGVmYXVsdCBmDQoJDQoJZm9yICggaSA9 IDA7IGkgPCBhX2FsbF9jb29raWVzLmxlbmd0aDsgaSsrICkNCgl7DQoJCWFfdGVt cF9jb29raWUgPSBhX2FsbF9jb29raWVzW2ldLnNwbGl0KCAnPScgKTsNCgkJY29v a2llX25hbWUgPSBhX3RlbXBfY29va2llWzBdLnJlcGxhY2UoL15ccyt8XHMrJC9n LCAnJyk7DQoJCWlmICggY29va2llX25hbWUgPT0gY2hlY2tfbmFtZSApDQoJCXsN CgkJCWJfY29va2llX2ZvdW5kID0gdHJ1ZTsNCgkJCWlmICggYV90ZW1wX2Nvb2tp ZS5sZW5ndGggPiAxICkNCgkJCXsNCgkJCQljb29raWVfdmFsdWUgPSB1bmVzY2Fw ZSggYV90ZW1wX2Nvb2tpZVsxXS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpICk7 DQoJCQl9DQoJCQlyZXR1cm4gY29va2llX3ZhbHVlOw0KCQkJYnJlYWs7DQoJCX0N CgkJYV90ZW1wX2Nvb2tpZSA9IG51bGw7DQoJCWNvb2tpZV9uYW1lID0gJyc7DQoJ fQ0KCWlmICggIWJfY29va2llX2ZvdW5kICkNCgl7DQoJCXJldHVybiBudWxsOw0K CX0NCn0NCg0KZnVuY3Rpb24gU2V0X0Nvb2tpZSggbmFtZSwgdmFsdWUsIGV4cGly ZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlICkgew0KCXZhciB0b2RheSA9IG5ldyBE YXRlKCk7DQoJdG9kYXkuc2V0VGltZSggdG9kYXkuZ2V0VGltZSgpICk7DQoJaWYg KCBleHBpcmVzICkNCgl7DQoJCWV4cGlyZXMgPSBleHBpcmVzICogMTAwMCAqIDYw ICogNjAgKiAyNDsNCgl9DQoJdmFyIGV4cGlyZXNfZGF0ZSA9IG5ldyBEYXRlKCB0 b2RheS5nZXRUaW1lKCkgKyAoZXhwaXJlcykgKTsNCg0KCWRvY3VtZW50LmNvb2tp ZSA9IG5hbWUgKyAiPSIgK2VzY2FwZSggdmFsdWUgKSArDQoJCSggKCBleHBpcmVz ICkgPyAiO2V4cGlyZXM9IiArIGV4cGlyZXNfZGF0ZS50b0dNVFN0cmluZygpIDog IiIgKSArIC8vZXhwaXJlcy50b0dNVFN0cmluZygpDQoJCSggKCBwYXRoICkgPyAi O3BhdGg9IiArIHBhdGggOiAiIiApICsgDQoJCSggKCBkb21haW4gKSA/ICI7ZG9t YWluPSIgKyBkb21haW4gOiAiIiApICsNCgkJKCAoIHNlY3VyZSApID8gIjtzZWN1 cmUiIDogIiIgKTsNCn0NCg0KZnVuY3Rpb24gRGVsZXRlX0Nvb2tpZSggbmFtZSwg cGF0aCwgZG9tYWluICkgew0KCWlmICggR2V0X0Nvb2tpZSggbmFtZSApICkgZG9j dW1lbnQuY29va2llID0gbmFtZSArICI9IiArDQoJCQkoICggcGF0aCApID8gIjtw YXRoPSIgKyBwYXRoIDogIiIpICsNCgkJCSggKCBkb21haW4gKSA/ICI7ZG9tYWlu PSIgKyBkb21haW4gOiAiIiApICsNCgkJCSI7ZXhwaXJlcz1UaHUsIDAxLUphbi0x OTcwIDAwOjAwOjAxIEdNVCI7DQp9DQoNCmZ1bmN0aW9uIGNyZWF0ZUlucHV0KG5h bWUsdmFsdWUpIHsNCglyZXR1cm4gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSIn ICsgbmFtZSArICciIG5hbWU9IicgKyBuYW1lICsgJyIgdmFsdWU9IicgKyB2YWx1 ZSArICciIC8+JzsNCn0NCg0KZnVuY3Rpb24gY2xpZW50X2RhdGEoaW5mbykNCnsN CglpZiAoaW5mbyA9PSAnd2lkdGgnKQ0KCXsNCgkJdmFyIHdpZHRoID0gKHNjcmVl bi53aWR0aCkgPyBzY3JlZW4ud2lkdGg6Jyc7DQoJCXZhciBoZWlnaHQgPSAoc2Ny ZWVuLmhlaWdodCkgPyBzY3JlZW4uaGVpZ2h0OicnOw0KCQlpZiAodHlwZW9mKHNj cmVlbi5kZXZpY2VYRFBJKSA9PSAnbnVtYmVyJykgew0KCQkJd2lkdGggKj0gc2Ny ZWVuLmRldmljZVhEUEkvc2NyZWVuLmxvZ2ljYWxYRFBJOw0KCQkJaGVpZ2h0ICo9 IHNjcmVlbi5kZXZpY2VZRFBJL3NjcmVlbi5sb2dpY2FsWURQSTsNCgkJfSANCgkJ dmFyIHN0cmluZ192YWx1ZSA9ICcnICsgd2lkdGggKyAnIHggJyArIGhlaWdodCAr ICcgcGl4ZWxzJzsNCgkJcmV0dXJuICh3aWR0aCAmJiBoZWlnaHQpID8gc3RyaW5n X3ZhbHVlIDogJyc7DQoJfQ0KCWVsc2UgaWYgKGluZm8gPT0gJ2pzJyApDQoJew0K CQlyZXR1cm4gMTsNCgl9DQoJZWxzZSBpZiAoIGluZm8gPT0gJ2Nvb2tpZXMnICkN Cgl7DQoJCWV4cGlyZXMgPScnOw0KCQlTZXRfQ29va2llKCAnY29va2llX3Rlc3Qn LCAnaXRfd29ya2VkJyAsIGV4cGlyZXMsICcnLCAnJywgJycgKTsNCgkJaWYgKCBH ZXRfQ29va2llKCAnY29va2llX3Rlc3QnICkgKQ0KCQl7DQoJCQl2YXIgdmFsdWUg PSAxOw0KCQl9DQoJCWVsc2Ugew0KCQkJdmFyIHZhbHVlID0gMDsNCgkJfQ0KCQly ZXR1cm4gdmFsdWU7DQoJfQ0KfQ0KDQp2YXIgRmxhc2hEZXRlY3Q9bmV3IGZ1bmN0 aW9uKCl7dmFyIHNlbGY9dGhpcztzZWxmLmluc3RhbGxlZD1mYWxzZTtzZWxmLnJh dz0iIjtzZWxmLm1ham9yPS0xO3NlbGYubWlub3I9LTE7c2VsZi5yZXZpc2lvbj0t MTtzZWxmLnJldmlzaW9uU3RyPSIiO3ZhciBhY3RpdmVYRGV0ZWN0UnVsZXM9W3si bmFtZSI6IlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjciLCJ2ZXJzaW9u IjpmdW5jdGlvbihvYmope3JldHVybiBnZXRBY3RpdmVYVmVyc2lvbihvYmopO319 LHsibmFtZSI6IlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjYiLCJ2ZXJz aW9uIjpmdW5jdGlvbihvYmope3ZhciB2ZXJzaW9uPSI2LDAsMjEiO3RyeXtvYmou QWxsb3dTY3JpcHRBY2Nlc3M9ImFsd2F5cyI7dmVyc2lvbj1nZXRBY3RpdmVYVmVy c2lvbihvYmopO31jYXRjaChlcnIpe30NCnJldHVybiB2ZXJzaW9uO319LHsibmFt ZSI6IlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoIiwidmVyc2lvbiI6ZnVu Y3Rpb24ob2JqKXtyZXR1cm4gZ2V0QWN0aXZlWFZlcnNpb24ob2JqKTt9fV07dmFy IGdldEFjdGl2ZVhWZXJzaW9uPWZ1bmN0aW9uKGFjdGl2ZVhPYmope3ZhciB2ZXJz aW9uPS0xO3RyeXt2ZXJzaW9uPWFjdGl2ZVhPYmouR2V0VmFyaWFibGUoIiR2ZXJz aW9uIik7fWNhdGNoKGVycil7fQ0KcmV0dXJuIHZlcnNpb247fTt2YXIgZ2V0QWN0 aXZlWE9iamVjdD1mdW5jdGlvbihuYW1lKXt2YXIgb2JqPS0xO3RyeXtvYmo9bmV3 IEFjdGl2ZVhPYmplY3QobmFtZSk7fWNhdGNoKGVycil7b2JqPXthY3RpdmVYRXJy b3I6dHJ1ZX07fQ0KcmV0dXJuIG9iajt9O3ZhciBwYXJzZUFjdGl2ZVhWZXJzaW9u PWZ1bmN0aW9uKHN0cil7dmFyIHZlcnNpb25BcnJheT1zdHIuc3BsaXQoIiwiKTty ZXR1cm57InJhdyI6c3RyLCJtYWpvciI6cGFyc2VJbnQodmVyc2lvbkFycmF5WzBd LnNwbGl0KCIgIilbMV0sMTApLCJtaW5vciI6cGFyc2VJbnQodmVyc2lvbkFycmF5 WzFdLDEwKSwicmV2aXNpb24iOnBhcnNlSW50KHZlcnNpb25BcnJheVsyXSwxMCks InJldmlzaW9uU3RyIjp2ZXJzaW9uQXJyYXlbMl19O307dmFyIHBhcnNlU3RhbmRh cmRWZXJzaW9uPWZ1bmN0aW9uKHN0cil7dmFyIGRlc2NQYXJ0cz1zdHIuc3BsaXQo LyArLyk7dmFyIG1ham9yTWlub3I9ZGVzY1BhcnRzWzJdLnNwbGl0KC9cLi8pO3Zh ciByZXZpc2lvblN0cj1kZXNjUGFydHNbM107cmV0dXJueyJyYXciOnN0ciwibWFq b3IiOnBhcnNlSW50KG1ham9yTWlub3JbMF0sMTApLCJtaW5vciI6cGFyc2VJbnQo bWFqb3JNaW5vclsxXSwxMCksInJldmlzaW9uU3RyIjpyZXZpc2lvblN0ciwicmV2 aXNpb24iOnBhcnNlUmV2aXNpb25TdHJUb0ludChyZXZpc2lvblN0cil9O307dmFy IHBhcnNlUmV2aXNpb25TdHJUb0ludD1mdW5jdGlvbihzdHIpe3JldHVybiBwYXJz ZUludChzdHIucmVwbGFjZSgvW2EtekEtWl0vZywiIiksMTApfHxzZWxmLnJldmlz aW9uO307c2VsZi5tYWpvckF0TGVhc3Q9ZnVuY3Rpb24odmVyc2lvbil7cmV0dXJu IHNlbGYubWFqb3I+PXZlcnNpb247fTtzZWxmLm1pbm9yQXRMZWFzdD1mdW5jdGlv bih2ZXJzaW9uKXtyZXR1cm4gc2VsZi5taW5vcj49dmVyc2lvbjt9O3NlbGYucmV2 aXNpb25BdExlYXN0PWZ1bmN0aW9uKHZlcnNpb24pe3JldHVybiBzZWxmLnJldmlz aW9uPj12ZXJzaW9uO307c2VsZi52ZXJzaW9uQXRMZWFzdD1mdW5jdGlvbihtYWpv cil7dmFyIHByb3BlcnRpZXM9W3NlbGYubWFqb3Isc2VsZi5taW5vcixzZWxmLnJl dmlzaW9uXTt2YXIgbGVuPU1hdGgubWluKHByb3BlcnRpZXMubGVuZ3RoLGFyZ3Vt ZW50cy5sZW5ndGgpO2ZvcihpPTA7aTxsZW47aSsrKXtpZihwcm9wZXJ0aWVzW2ld Pj1hcmd1bWVudHNbaV0pe2lmKGkrMTxsZW4mJnByb3BlcnRpZXNbaV09PWFyZ3Vt ZW50c1tpXSl7Y29udGludWU7fWVsc2V7cmV0dXJuIHRydWU7fX1lbHNle3JldHVy biBmYWxzZTt9fX07c2VsZi5GbGFzaERldGVjdD1mdW5jdGlvbigpe2lmKG5hdmln YXRvci5wbHVnaW5zJiZuYXZpZ2F0b3IucGx1Z2lucy5sZW5ndGg+MCl7dmFyIHR5 cGU9J2FwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoJzt2YXIgbWltZVR5cGVz PW5hdmlnYXRvci5taW1lVHlwZXM7aWYobWltZVR5cGVzJiZtaW1lVHlwZXNbdHlw ZV0mJm1pbWVUeXBlc1t0eXBlXS5lbmFibGVkUGx1Z2luJiZtaW1lVHlwZXNbdHlw ZV0uZW5hYmxlZFBsdWdpbi5kZXNjcmlwdGlvbil7dmFyIHZlcnNpb249bWltZVR5 cGVzW3R5cGVdLmVuYWJsZWRQbHVnaW4uZGVzY3JpcHRpb247dmFyIHZlcnNpb25P Ymo9cGFyc2VTdGFuZGFyZFZlcnNpb24odmVyc2lvbik7c2VsZi5yYXc9dmVyc2lv bk9iai5yYXc7c2VsZi5tYWpvcj12ZXJzaW9uT2JqLm1ham9yO3NlbGYubWlub3I9 dmVyc2lvbk9iai5taW5vcjtzZWxmLnJldmlzaW9uU3RyPXZlcnNpb25PYmoucmV2 aXNpb25TdHI7c2VsZi5yZXZpc2lvbj12ZXJzaW9uT2JqLnJldmlzaW9uO3NlbGYu aW5zdGFsbGVkPXRydWU7fX1lbHNlIGlmKG5hdmlnYXRvci5hcHBWZXJzaW9uLmlu ZGV4T2YoIk1hYyIpPT0tMSYmd2luZG93LmV4ZWNTY3JpcHQpe3ZhciB2ZXJzaW9u PS0xO2Zvcih2YXIgaT0wO2k8YWN0aXZlWERldGVjdFJ1bGVzLmxlbmd0aCYmdmVy c2lvbj09LTE7aSsrKXt2YXIgb2JqPWdldEFjdGl2ZVhPYmplY3QoYWN0aXZlWERl dGVjdFJ1bGVzW2ldLm5hbWUpO2lmKCFvYmouYWN0aXZlWEVycm9yKXtzZWxmLmlu c3RhbGxlZD10cnVlO3ZlcnNpb249YWN0aXZlWERldGVjdFJ1bGVzW2ldLnZlcnNp b24ob2JqKTtpZih2ZXJzaW9uIT0tMSl7dmFyIHZlcnNpb25PYmo9cGFyc2VBY3Rp dmVYVmVyc2lvbih2ZXJzaW9uKTtzZWxmLnJhdz12ZXJzaW9uT2JqLnJhdztzZWxm Lm1ham9yPXZlcnNpb25PYmoubWFqb3I7c2VsZi5taW5vcj12ZXJzaW9uT2JqLm1p bm9yO3NlbGYucmV2aXNpb249dmVyc2lvbk9iai5yZXZpc2lvbjtzZWxmLnJldmlz aW9uU3RyPXZlcnNpb25PYmoucmV2aXNpb25TdHI7fX19fX0oKTt9O0ZsYXNoRGV0 ZWN0LkpTX1JFTEVBU0U9IjEuMC40IjsNCg0KDQoNCi8qdmFyIEpTRW5hYmxlIAkJ PSBjcmVhdGVJbnB1dCgnSlNFbmFibGUnLGNsaWVudF9kYXRhKCdqcycpKTsNCnZh ciBjb29raWVFbmFibGUgCT0gY3JlYXRlSW5wdXQoJ2Nvb2tpZUVuYWJsZScsY2xp ZW50X2RhdGEoJ2Nvb2tpZXMnKSk7DQp2YXIgc2NyZWVuUmVzIAkJPSBjcmVhdGVJ bnB1dCgnc2NyZWVuUmVzJyxjbGllbnRfZGF0YSgnd2lkdGgnKSk7DQp2YXIgZmxh c2hQbGF5ZXJWZXJzCT0gY3JlYXRlSW5wdXQoJ2ZsYXNoUGxheWVyVmVycycsRmxh c2hEZXRlY3QubWFqb3IrJy4nK0ZsYXNoRGV0ZWN0Lm1pbm9yKycgJytGbGFzaERl dGVjdC5yZXZpc2lvblN0cik7Ki8NCg0KLypmdW5jdGlvbiBTZXRJbmZvKGlkKXsN Cgl2YXIgZGF0YSA9IEpTRW5hYmxlICsgY29va2llRW5hYmxlICsgc2NyZWVuUmVz ICsgZmxhc2hQbGF5ZXJWZXJzOw0KCSQoaWQpLmlubmVySFRNTCA9IGRhdGE7DQp9 Ki8NCg0KZnVuY3Rpb24gRW1haWxUZXRzKGlkLHRleHQpew0KCXZhciBhbHBoYUV4 cCA9IC9eWy0rXC4wLTk9YS16QS1aX10rQChbLTAtOWEtekEtWl0rXC4pKyhbMC05 YS16QS1aXSl7Miw0fSQvOw0KCSBpZiAoJChpZCkudmFsdWUgPT0gJycpew0KCQlh bGVydCh0ZXh0KycgaXMgcmVxdWlyZWQhJyk7DQoJCSQoaWQpLmZvY3VzKCk7DQoJ CXJldHVybiBmYWxzZTsNCgkgfWVsc2UgaWYgKCFhbHBoYUV4cC50ZXN0KCQoaWQp LnZhbHVlKSl7DQoJCWFsZXJ0KHRleHQrJyBpcyBub3QgY29ycmVjdCEnKTsNCgkJ JChpZCkuZm9jdXMoKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX1lbHNlew0KCQlyZXR1 cm4gdHJ1ZTsNCgl9DQp9DQoNCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8vKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqY29tbW9uLmpzKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovDQovLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLw0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8N Ci8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCndpbmRvdy5k ZWZhdWx0TnVtPTUgLy9rb2xpY2hlY3R2byBibG9rb3Ygc3ByYXZhIHBvIHVtb2xj aGFuaXl1DQp3aW5kb3cubm9TZWxlY3RzID0gZmFsc2U7IC8vemFncnVqYXQgZGVr b3JhdGl2bmllIHNlbGVjdHMNCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCmZ1bmN0aW9uIHdy YXBTZWxlY3RCb3goc2VsZWN0KSB7DQoJU2VsZWN0b3IuZmluZENoaWxkRWxlbWVu dHMoc2VsZWN0LnBhcmVudE5vZGUsIFsnbGknXSkud2l0aG91dChzZWxlY3QpLmVh Y2goZnVuY3Rpb24gKGxpKSB7DQoJCUV2ZW50Lm9ic2VydmUobGksICdjbGljaycs IGZ1bmN0aW9uKGV2ZW50KSB7DQoJCQlsaSA9IEV2ZW50LmVsZW1lbnQoZXZlbnQp Ow0KCQkJc2VsZWN0LmRvd24oJ2R0JykudXBkYXRlKGxpLmlubmVySFRNTCk7DQoJ CQlpZiAoaW5wdXQgPSBzZWxlY3QuZG93bignaW5wdXQnKSkgew0KCQkJCXZhciBh dHRyVmFsID0gbGkuZ2V0QXR0cmlidXRlKCd2YWx1ZScpOw0KCQkJCWlucHV0LnZh bHVlID0gKCFhdHRyVmFsIHx8IGF0dHJWYWwgPT0gLTEpID8gbGkuZ2V0QXR0cmli dXRlKCdsYW5nJykgOiBhdHRyVmFsOw0KCQkJfQ0KCQkJdmFyIGNoYW5nZUNvZGUg PSBzZWxlY3QuZ2V0QXR0cmlidXRlKCdvbmNoYW5nZScpOw0KCQkJaWYgKGNoYW5n ZUNvZGUgJiYgY2hhbmdlQ29kZSAhPSAnJykgew0KCQkJCWV2YWwoY2hhbmdlQ29k ZSk7DQoJCQl9DQoJCX0uYmluZChzZWxlY3QpKTsNCgl9KTsNCn0NCg0KRXZlbnQu b2JzZXJ2ZSh3aW5kb3csICJsb2FkIiwgZnVuY3Rpb24oZXZlbnQpIHsNCglpZiAo JCgndG9wMjBkdmRzJykpIHsNCgkJVG9wTGlzdC5pbml0KCk7DQoJfQ0KCWlmIChu YXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1TSUUiKSA+IC0xKSB7DQoJCSQk KCJhLnRodW1iIGltZyIpLmVhY2goZnVuY3Rpb24oaXRlbSkgew0KCQkJaXRlbS5z dHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7DQoJCQlpdGVtLnN0eWxlLmRpc3Bs YXkgPSAiaW5saW5lIjsNCgkJfSk7DQoJfQ0KCSQkKCdkbC5zZWxlY3Rib3hzJyku ZWFjaCh3cmFwU2VsZWN0Qm94KTsNCn0pOw0KDQpmdW5jdGlvbiBhamF4U2VsZWN0 TG9hZGVyKHNlbGVjdCwgdHlwZSkgew0KCXNlbGVjdC5kb3duKCdkZCcpLnRvZ2ds ZSgpOw0KCWlmICghd2luZG93LmFqYXhMb2FkRmxhZ3MgfHwgIXdpbmRvdy5hamF4 TG9hZEZsYWdzW3R5cGVdKSB7DQoJCWlmICghd2luZG93LmFqYXhMb2FkRmxhZ3Mp IHsNCgkJCXdpbmRvdy5hamF4TG9hZEZsYWdzID0ge307DQoJCX0NCgkJbmV3IEFq YXguUmVxdWVzdCgnYmxvY2ticm93c2VzZXRzLnBocD9CbG9ja0Jyb3dzZVNldHNf YWpheD0xJkJsb2NrQnJvd3NlU2V0c19zaG93JyArIHR5cGUgKyAnPTEnLCB7DQoJ CQltZXRob2Q6ICdnZXQnLA0KCQkJb25TdWNjZXNzOiBmdW5jdGlvbih0KSB7DQoJ CQkJd2luZG93LmFqYXhMb2FkRmxhZ3NbdHlwZV0gPSB0cnVlOw0KCQkJCSQoJ2Jy b3dzZScgKyB0eXBlKS51cGRhdGUodC5yZXNwb25zZVRleHQpOw0KCQkJCXdyYXBT ZWxlY3RCb3goc2VsZWN0KTsNCgkJCQkNCgkJCQlpZiAoZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQoJ3NlYXJjaEZvcm1hJykpew0KCQkJCQkkKCdzZWFyY2gnICsgdHlw ZSkudXBkYXRlKHQucmVzcG9uc2VUZXh0KTsNCgkJCQkJd3JhcFNlbGVjdEJveChz ZWxlY3QpOw0KCQkJCQl9DQoJCQkJDQoJCQl9DQoJCX0pOw0KCX0NCn0NCg0KLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vDQoNCg0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqcG9wdXAuanMqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KdmFyIHdhc19TYnJQ b3BVcF9Jbml0ID0gMDsNCnZhciBTYnJQb3BVcCA9IHsNCglpbml0OiBmdW5jdGlv bihpZCkgeyANCgkJdGhpcy5sYXN0ID0gZmFsc2U7DQoJCXRoaXMudHJpZ2dlciA9 IGZhbHNlOw0KDQoJCWlmIChpZCAmJiAoZm9ybSA9IGRvY3VtZW50LmdldEVsZW1l bnRCeUlkKGlkKSkpIHsNCgkJCXRoaXMucyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRh Z05hbWUoJ3NlbGVjdCcpOw0KCQl9IGVsc2Ugew0KCQkJdGhpcy5zID0gZG9jdW1l bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NlbGVjdCcpOw0KCQl9DQogICAgCXRo aXMuc0NvdW50ID0gdGhpcy5zLmxlbmd0aDsNCgkJZm9yICh2YXIgaT0wOyBpPHRo aXMuc0NvdW50OyBpKyspIHsNCgkJICBpZiAoIXRoaXMuc1tpXS5tdWx0aXBsZSkg ew0KICAJCQlpZiAoIXRoaXMuc1tpXS5pZCkgew0KICAJCQkJdGhpcy5zW2ldLmlk ID0gJ3NlbGVjdF8nK2k7DQogIAkJCX0NCgkJCXRoaXMucnVuKHRoaXMuc1tpXSwg aSk7DQogCQkgIH0NCgkJfQ0KCX0sDQoNCglydW46IGZ1bmN0aW9uKG9iaiwgY291 bnRlcikgew0KCQkvLyBidWlsZGluZyBmYXV4IHNlbGVjdCBzdHJ1Y3R1cmUNCgkJ dmFyIGZhdXhTZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkbCcpOw0KCQlm YXV4U2VsLmNsYXNzTmFtZSA9IG9iai5jbGFzc05hbWUgPyBvYmouY2xhc3NOYW1l ICsgJyBzYnJXcmFwJyA6ICdzYnJXcmFwJzsNCgkJb2JqLmNsYXNzTmFtZSA9ICdz ZWxSZXBsYWNlZCc7DQoNCgkJZmF1eFNlbC5vbmNsaWNrID0gZnVuY3Rpb24oKSB7 CQ0KCQkJdmFyIHNlbGVjdEVsZW1lbnQgPSB0aGlzLm5leHRTaWJsaW5nOw0KCQkJ aWYgKHRoaXMuY2hpbGROb2Rlc1sxXS5jbGFzc05hbWUgPT0gJ3Nick9wdHNDb2wn KSB7DQoJCQkJc2VsZWN0RWxlbWVudC5vbmZvY3VzKCk7DQoJCQkJU2JyUG9wVXAu bGFzdC5jbGFzc05hbWUgPSAnc2JyT3B0c0NvbCc7DQoJCQkJU2JyUG9wVXAubGFz dCA9IHRoaXMuY2hpbGROb2Rlc1sxXTsNCgkJCQlTYnJQb3BVcC50cmlnZ2VyID0g ZmFsc2U7DQoJCQkJZG9jdW1lbnQub25jbGljayA9IGZ1bmN0aW9uKCkgeyBpZiAo U2JyUG9wVXAudHJpZ2dlcikgU2JyUG9wVXAubGFzdC5jbGFzc05hbWUgPSAnc2Jy T3B0c0NvbCc7IFNiclBvcFVwLnRyaWdnZXIgPSB0cnVlOyB9DQoJCQkJdGhpcy5j aGlsZE5vZGVzWzFdLmNsYXNzTmFtZSA9ICdzYnJPcHRzRXhwJzsNCgkJCX0gZWxz ZSB7DQoJCQkJU2JyUG9wVXAubGFzdE9iaklkID0gZmFsc2U7DQoJCQkJZG9jdW1l bnQub25jbGljayA9IGZ1bmN0aW9uKCkgewl9DQoJCQkJdGhpcy5jaGlsZE5vZGVz WzFdLmNsYXNzTmFtZSA9ICdzYnJPcHRzQ29sJzsNCgkJCX0NCgkJCWlmICh0aGlz LmNoaWxkTm9kZXNbMF0uY2xhc3NOYW1lID09ICcnKSB7DQoJCQkJdGhpcy5uZXh0 U2libGluZy5mb2N1cygpOw0KCQkJfQ0KCQl9DQoNCgkJdmFyIGN1ck9wdCA9IGRv Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2R0Jyk7DQoJCWN1ck9wdC5jbGFzc05hbWUg PSAnJzsNCgkJZmF1eFNlbC5hcHBlbmRDaGlsZChjdXJPcHQpOw0KCQl2YXIgb3B0 c1dyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkZCcpOw0KCQlvcHRzV3Jh cC5jbGFzc05hbWUgPSAnc2JyT3B0c0NvbCc7DQoJCWZhdXhTZWwuYXBwZW5kQ2hp bGQob3B0c1dyYXApOw0KCQl2YXIgb3B0c0xpc3QgPSBkb2N1bWVudC5jcmVhdGVF bGVtZW50KCd1bCcpOw0KCQlvcHRzV3JhcC5hcHBlbmRDaGlsZChvcHRzTGlzdCk7 DQoJCW9wdHNMaXN0LnN0eWxlLnpJbmRleCA9IGZhdXhTZWwuc3R5bGUuekluZGV4 ID0gMTAwMC1jb3VudGVyOw0KDQoJCXZhciBvcHRzID0gb2JqLm9wdGlvbnM7DQoJ CXZhciBzZWxlY3RlZE9wdCA9ICghb2JqLnNlbGVjdGVkSW5kZXgpID8gMCA6IG9i ai5zZWxlY3RlZEluZGV4Ow0KCQlmb3IgKHZhciBpPTA7IGk8b3B0cy5sZW5ndGg7 IGkrKykgew0KCQkJdmFyIGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGkn KTsNCgkJCXZhciB0eHQgPSBvcHRzW2ldLnRleHQgPyBkb2N1bWVudC5jcmVhdGVU ZXh0Tm9kZShvcHRzW2ldLnRleHQpIDogZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo J2JsYW5rIG9wdGlvbicpOw0KCQkJbGkuYXBwZW5kQ2hpbGQodHh0KTsNCgkJCWxp LnRpdGxlID0gb3B0c1tpXS50aXRsZTsNCgkJCWxpLnNlbEluZGV4ID0gaTsNCgkJ CWxpLnNlbGVjdElEID0gb2JqLmlkOw0KCQkJbGkub25jbGljayA9IGZ1bmN0aW9u KCkgew0KCQkJCVNiclBvcFVwLnNlbGVjdE1lKHRoaXMpOw0KCQkJfQ0KCQkJaWYg KGkgPT0gc2VsZWN0ZWRPcHQpIHsNCgkJCQlsaS5jbGFzc05hbWUgPSAnc2JyU2Vs ZWN0ZWQnOw0KCQkJCWN1ck9wdC5hcHBlbmRDaGlsZCh0eHQuY2xvbmVOb2RlKGZh bHNlKSk7DQoJCQl9DQoJCQlpZiAod2luZG93LmF0dGFjaEV2ZW50KSB7DQoJCQkJ bGkub25tb3VzZW92ZXIgPSBmdW5jdGlvbigpIHsNCgkJCQkJdGhpcy5jbGFzc05h bWUgKz0gJyBob3Zlcic7DQoJCQkJfQ0KCQkJCWxpLm9ubW91c2VvdXQgPSBmdW5j dGlvbigpIHsNCgkJCQkJdGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZS5y ZXBsYWNlKG5ldyBSZWdFeHAoIiBob3ZlclxcYiIpLCAnJyk7DQoJCQkJfQ0KCQkJ fQ0KCQkJb3B0c0xpc3QuYXBwZW5kQ2hpbGQobGkpOw0KCQl9DQoJCW9iai5vbGRv bmZvY3VzID0gb2JqLm9uZm9jdXM7DQoJCW9iai5vbmZvY3VzID0gZnVuY3Rpb24o KSB7DQoJCQlpZiAodGhpcy5vbGRvbmZvY3VzKSB0aGlzLm9sZG9uZm9jdXMoKTsN CgkJCXRoaXMucHJldmlvdXNTaWJsaW5nLmNoaWxkTm9kZXNbMF0uY2xhc3NOYW1l ID0gJ3NickZvY3VzZWQnOw0KCQl9DQoJCW9iai5vbGRvbmJsdXIgPSBvYmoub25i bHVyOw0KCQlvYmoub25ibHVyID0gZnVuY3Rpb24oKSB7DQoJCQlpZiAodGhpcy5v bGRvbmJsdXIpIHRoaXMub2xkb25ibHVyKCk7DQoJCQl0aGlzLnByZXZpb3VzU2li bGluZy5jaGlsZE5vZGVzWzBdLmNsYXNzTmFtZSA9ICcnOw0KCQl9DQoJCW9iai5v bGRvbmNoYW5nZSA9IG9iai5vbmNoYW5nZTsNCgkJb2JqLm9uY2hhbmdlID0gZnVu Y3Rpb24oKSB7DQoJCQlpZihvYmoucHJldmlvdXMgPT0gdW5kZWZpbmVkKSB7DQoJ CQkJb2JqLnByZXZpb3VzID0gb2JqLnZhbHVlOw0KCQkJfSBlbHNlIHsNCgkJCQlp ZihvYmoucHJldmlvdXMgPT0gb2JqLnZhbHVlKSB7DQoJCQkJCXJldHVybjsNCgkJ CQl9IGVsc2Ugew0KCQkJCQlvYmoucHJldmlvdXMgPSBvYmoudmFsdWU7DQoJCQkJ fQ0KCQkJfQ0KCQkJLy9hbGVydCgiQ2hhbmdlIik7DQoJCQlpZiAodGhpcy5vbGRv bmNoYW5nZSkgdGhpcy5vbGRvbmNoYW5nZSgpOw0KCQkJdmFyIGlkeCA9IHRoaXMu c2VsZWN0ZWRJbmRleDsNCgkJCXZhciB1bCA9IHRoaXMucHJldmlvdXNTaWJsaW5n LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXTsNCgkJCVNiclBvcFVwLnNlbGVj dE1lKHVsLmNoaWxkTm9kZXNbaWR4XSwxKTsNCgkJfQ0KCQlvYmoub25rZXlwcmVz cyA9IG9iai5vbmNoYW5nZTsNCg0KCQlvYmoucGFyZW50Tm9kZS5pbnNlcnRCZWZv cmUoZmF1eFNlbCxvYmopOw0KCX0sDQoNCglzZWxlY3RNZTogZnVuY3Rpb24obGlP YmopIHsNCgkJdmFyIHNlbGVjdEVsZW1lbnQgPSBsaU9iai5wYXJlbnROb2RlLnBh cmVudE5vZGUucGFyZW50Tm9kZS5uZXh0U2libGluZzsNCgkJdmFyIGxpcyA9IGxp T2JqLnBhcmVudE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpJyk7DQoJCWZv ciAodmFyIGk9MDsgaTxsaXMubGVuZ3RoOyBpKyspIHsNCgkJCWlmIChsaXNbaV0g IT0gbGlPYmopIHsNCgkJCQlsaXNbaV0uY2xhc3NOYW1lID0gJyc7DQoJCQkJbGlz W2ldLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsNCgkJCQkJU2JyUG9wVXAuc2VsZWN0 TWUodGhpcyk7DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQl0aGlzLnNldFZhbChs aU9iai5zZWxlY3RJRCwgbGlPYmouc2VsSW5kZXgpOw0KCQkJCWxpT2JqLmNsYXNz TmFtZSA9ICdzYnJTZWxlY3RlZCc7DQoJCQkJdmFyIGN1ck9wdCA9IGxpT2JqLnBh cmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbMF07DQoJ CQkJY3VyT3B0LnJlbW92ZUNoaWxkKGN1ck9wdC5jaGlsZE5vZGVzWzBdKTsNCgkJ CQljdXJPcHQuYXBwZW5kQ2hpbGQobGlPYmouY2hpbGROb2Rlc1swXS5jbG9uZU5v ZGUoZmFsc2UpKTsNCgkJCQlpZihhcmd1bWVudHNbMV0gIT0gMSl7DQoJCQkJCXNl bGVjdEVsZW1lbnQub25jaGFuZ2UoKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9LA0K DQoJc2V0VmFsOiBmdW5jdGlvbihvYmpJRCwgdmFsKSB7DQoJCXZhciBvYmogPSBk b2N1bWVudC5nZXRFbGVtZW50QnlJZChvYmpJRCk7DQoJCW9iai5zZWxlY3RlZElu ZGV4ID0gdmFsOw0KCX0NCn0NCg0KDQp2YXIgYnJvd3Nlck5hbWU9bmF2aWdhdG9y LmFwcE5hbWU7ICANCg0KaWYgKGJyb3dzZXJOYW1lPT0iTWljcm9zb2Z0IEludGVy bmV0IEV4cGxvcmVyIikgDQp7IA0KICB2YXIgYWd0PW5hdmlnYXRvci51c2VyQWdl bnQudG9Mb3dlckNhc2UoKTsNCiAgdmFyIGllUG9zICA9IGFndC5pbmRleE9mKCdt c2llJyk7DQogIHZhciBicm93c2VyVmVyID0gcGFyc2VGbG9hdChhZ3Quc3Vic3Ry aW5nKGllUG9zKzUsYWd0LmluZGV4T2YoJzsnLGllUG9zKSkpOw0KDQogIGlmKGJy b3dzZXJWZXIgPCA3KSAgIHdpbmRvdy5pc0lFNj10cnVlOw0KfQ0KZWxzZSANCiAg d2luZG93LmlzSUU2PWZhbHNlOyANCg0KDQoNCmZ1bmN0aW9uIGdldFBhZ2VTaXpl KCkgew0KCQ0KIHZhciB4U2Nyb2xsLCB5U2Nyb2xsOw0KDQppZiAod2luZG93Lmlu bmVySGVpZ2h0ICYmIHdpbmRvdy5zY3JvbGxNYXhZKSB7CQ0KCXhTY3JvbGwgPSB3 aW5kb3cuaW5uZXJXaWR0aCArIHdpbmRvdy5zY3JvbGxNYXhYOw0KCXlTY3JvbGwg PSB3aW5kb3cuaW5uZXJIZWlnaHQgKyB3aW5kb3cuc2Nyb2xsTWF4WTsNCn0gZWxz ZSBpZiAoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5ib2R5 Lm9mZnNldEhlaWdodCl7IC8vIGFsbCBidXQgRXhwbG9yZXIgTWFjDQoJeFNjcm9s bCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg7DQoJeVNjcm9sbCA9IGRvY3Vt ZW50LmJvZHkuc2Nyb2xsSGVpZ2h0Ow0KfSBlbHNlIHsgLy8gRXhwbG9yZXIgTWFj Li4ud291bGQgYWxzbyB3b3JrIGluIEV4cGxvcmVyIDYgU3RyaWN0LCBNb3ppbGxh IGFuZCBTYWZhcmkNCgl4U2Nyb2xsID0gZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0 aDsNCgl5U2Nyb2xsID0gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQ7DQp9DQoN CnZhciB3aW5kb3dXaWR0aCwgd2luZG93SGVpZ2h0Ow0KDQppZiAoc2VsZi5pbm5l ckhlaWdodCkgewkvLyBhbGwgZXhjZXB0IEV4cGxvcmVyDQoJaWYoZG9jdW1lbnQu ZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKXsNCgkJd2luZG93V2lkdGggPSBk b2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7IA0KCX0gZWxzZSB7 DQoJCXdpbmRvd1dpZHRoID0gc2VsZi5pbm5lcldpZHRoOw0KCX0NCgl3aW5kb3dI ZWlnaHQgPSBzZWxmLmlubmVySGVpZ2h0Ow0KfSBlbHNlIGlmIChkb2N1bWVudC5k b2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVu dEhlaWdodCkgeyAvLyBFeHBsb3JlciA2IFN0cmljdCBNb2RlDQoJd2luZG93V2lk dGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7DQoJd2lu ZG93SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdo dDsNCn0gZWxzZSBpZiAoZG9jdW1lbnQuYm9keSkgeyAvLyBvdGhlciBFeHBsb3Jl cnMNCgl3aW5kb3dXaWR0aCA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7DQoJ d2luZG93SGVpZ2h0ID0gZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7DQp9CQ0K DQovLyBmb3Igc21hbGwgcGFnZXMgd2l0aCB0b3RhbCBoZWlnaHQgbGVzcyB0aGVu IGhlaWdodCBvZiB0aGUgdmlld3BvcnQNCmlmKHlTY3JvbGwgPCB3aW5kb3dIZWln aHQpew0KCXBhZ2VIZWlnaHQgPSB3aW5kb3dIZWlnaHQ7DQp9IGVsc2UgeyANCglw YWdlSGVpZ2h0ID0geVNjcm9sbDsNCn0NCg0KLy8gZm9yIHNtYWxsIHBhZ2VzIHdp dGggdG90YWwgd2lkdGggbGVzcyB0aGVuIHdpZHRoIG9mIHRoZSB2aWV3cG9ydA0K aWYoeFNjcm9sbCA8IHdpbmRvd1dpZHRoKXsJDQoJcGFnZVdpZHRoID0geFNjcm9s bDsJCQ0KfSBlbHNlIHsNCglwYWdlV2lkdGggPSB3aW5kb3dXaWR0aDsNCn0NCg0K cmV0dXJuIFtwYWdlV2lkdGgscGFnZUhlaWdodF07DQp9DQoNCmZ1bmN0aW9uIGdl dFNjcm9sbFhZKCkgew0KICB2YXIgc2NyT2ZYID0gMCwgc2NyT2ZZID0gMDsNCiAg aWYoIHR5cGVvZiggd2luZG93LnBhZ2VZT2Zmc2V0ICkgPT0gJ251bWJlcicgKSB7 DQogICAgLy9OZXRzY2FwZSBjb21wbGlhbnQNCiAgICBzY3JPZlkgPSB3aW5kb3cu cGFnZVlPZmZzZXQ7DQogICAgc2NyT2ZYID0gd2luZG93LnBhZ2VYT2Zmc2V0Ow0K ICB9IGVsc2UgaWYoIGRvY3VtZW50LmJvZHkgJiYgKCBkb2N1bWVudC5ib2R5LnNj cm9sbExlZnQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgKSApIHsNCiAgICAv L0RPTSBjb21wbGlhbnQNCiAgICBzY3JPZlkgPSBkb2N1bWVudC5ib2R5LnNjcm9s bFRvcDsNCiAgICBzY3JPZlggPSBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ7DQog IH0gZWxzZSBpZiggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmICggZG9jdW1l bnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgZG9jdW1lbnQuZG9jdW1l bnRFbGVtZW50LnNjcm9sbFRvcCApICkgew0KICAgIC8vSUU2IHN0YW5kYXJkcyBj b21wbGlhbnQgbW9kZQ0KICAgIHNjck9mWSA9IGRvY3VtZW50LmRvY3VtZW50RWxl bWVudC5zY3JvbGxUb3A7DQogICAgc2NyT2ZYID0gZG9jdW1lbnQuZG9jdW1lbnRF bGVtZW50LnNjcm9sbExlZnQ7DQogIH0NCiAgcmV0dXJuIFsgc2NyT2ZYLCBzY3JP ZlkgXTsNCn0NCg0KZnVuY3Rpb24gZ2V0V2luZG93U2l6ZSgpDQp7DQoJdmFyIHcg PSAwOw0KCXZhciBoID0gMDsNCg0KCS8vSUUNCglpZighd2luZG93LmlubmVyV2lk dGgpDQoJew0KCQkvL3N0cmljdCBtb2RlDQoJCWlmKCEoZG9jdW1lbnQuZG9jdW1l bnRFbGVtZW50LmNsaWVudFdpZHRoID09IDApKQ0KCQl7DQoJCQl3ID0gZG9jdW1l bnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOw0KCQkJaCA9IGRvY3VtZW50 LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7DQoJCX0NCgkJLy9xdWlya3Mg bW9kZQ0KCQllbHNlDQoJCXsNCgkJCXcgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdp ZHRoOw0KCQkJaCA9IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0Ow0KCQl9DQoJ fQ0KCS8vdzNjDQoJZWxzZQ0KCXsNCgkJdyA9IHdpbmRvdy5pbm5lcldpZHRoOw0K CQloID0gd2luZG93LmlubmVySGVpZ2h0Ow0KCX0NCglyZXR1cm4gW3csaF07DQp9 DQoNCg0KZnVuY3Rpb24gc2hvd1NpbXBsZShpZCkNCnsNCgl2YXIgYXJyYXlQYWdl U2l6ZSA9IHRoaXMuZ2V0UGFnZVNpemUoKTsNCgkkKCdwb3B1cF9vdmVybGF5Jyku c2V0U3R5bGUoeyB3aWR0aDogYXJyYXlQYWdlU2l6ZVswXSArICdweCcsIGhlaWdo dDogYXJyYXlQYWdlU2l6ZVsxXSArICdweCcgfSk7DQoJDQoJJCgncG9wdXBfb3Zl cmxheScpLnNob3coKTsNCgkkKGlkKS5zaG93KCk7DQoJDQoJaWYoZ2V0U2Nyb2xs WFkoKVsxXSA+IDApDQoJew0KCSB2YXIgbXlIZWlnaHQgPSAwOw0KCSAgaWYoIHR5 cGVvZiggd2luZG93LmlubmVyV2lkdGggKSA9PSAnbnVtYmVyJyApIHsNCgkJLy9O b24tSUUNCgkJbXlIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7DQoJICB9IGVs c2UgaWYoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAoIGRvY3VtZW50LmRv Y3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVs ZW1lbnQuY2xpZW50SGVpZ2h0ICkgKSB7DQoJCS8vSUUgNisgaW4gJ3N0YW5kYXJk cyBjb21wbGlhbnQgbW9kZScNCgkJbXlIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVu dEVsZW1lbnQuY2xpZW50SGVpZ2h0Ow0KCSAgfSBlbHNlIGlmKCBkb2N1bWVudC5i b2R5ICYmICggZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5i b2R5LmNsaWVudEhlaWdodCApICkgew0KCQkvL0lFIDQgY29tcGF0aWJsZQ0KCQlt eUhlaWdodCA9IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0Ow0KCSAgfQ0KCQkk KGlkKS5zdHlsZS50b3AgPSBnZXRTY3JvbGxYWSgpWzFdICsgbXlIZWlnaHQvMiAr ICdweCc7DQoJCSQoaWQpLnN0eWxlLm1hcmdpbkxlZnQgPSAnLScrJChpZCsnX2hv bGRlcicpLmdldFdpZHRoKCkvMiArICdweCc7DQoJCSQoaWQpLnN0eWxlLm1hcmdp blRvcCA9ICctJyskKGlkKydfaG9sZGVyJykuZ2V0SGVpZ2h0KCkvMiArICdweCc7 DQoJfQ0KCWVsc2UNCgl7DQoJCSQoaWQpLnN0eWxlLnRvcCA9ICI1MCUiOw0KCQkk KGlkKS5zdHlsZS5tYXJnaW5MZWZ0ID0gJy0nKyQoaWQrJ19ob2xkZXInKS5nZXRX aWR0aCgpLzIgKyAncHgnOw0KCQkkKGlkKS5zdHlsZS5tYXJnaW5Ub3AgPSAnLScr JChpZCsnX2hvbGRlcicpLmdldEhlaWdodCgpLzIgKyAncHgnOw0KCX0NCn0NCg0K ZnVuY3Rpb24gbW92ZU5vZGVDb250ZW50KGZyb20sIHRvKSB7DQoJJEEoJChmcm9t KS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKGVsdCkgew0KCQlpZiAoZWx0Lm5v ZGVUeXBlICE9IDMpIHsNCgkJCSQoZnJvbSkucmVtb3ZlQ2hpbGQoZWx0KTsgJCh0 bykuYXBwZW5kQ2hpbGQoZWx0KTsNCgkJfQ0KCX0pDQp9DQoNCmZ1bmN0aW9uIHBv cHVwU2hvdyhlbGVtSWQsaHJlZixjb3N0LGlzS2V5d29yZHMsIHllc0lkKQ0KewkJ DQoJaWYoaHJlZikNCgl7DQoJCWlmKHR5cGVvZih5ZXNJZCkgPT0gJ3VuZGVmaW5l ZCcpew0KCQkJJCgneWVzJykuaHJlZiA9IGhyZWY7DQoJCQkkKCd5ZXNfdGV0eCcp LmhyZWYgPSBocmVmOw0KCQl9DQoJCWVsc2UNCgkJJCh5ZXNJZCkuaHJlZiA9IGhy ZWY7DQoJfQ0KCWlmKGNvc3QpICQoJ3dhcm5pbmdfY29zdCcpLnVwZGF0ZShjb3N0 KTsNCglpZihjb3N0KSAkKCd3YXJuaW5nX2Nvc3RfZicpLnVwZGF0ZShjb3N0KTsN CgkNCgl2YXIgYXJyYXlQYWdlU2l6ZSA9IHRoaXMuZ2V0UGFnZVNpemUoKTsNCgkk KCdwb3B1cF9vdmVybGF5Jykuc2V0U3R5bGUoeyB3aWR0aDogYXJyYXlQYWdlU2l6 ZVswXSArICdweCcsIGhlaWdodDogYXJyYXlQYWdlU2l6ZVsxXSArICdweCcgfSk7 DQoJDQoJaWYoJChlbGVtSWQrJ19ob2xkZXInKSAmJiAkKGVsZW1JZCsnX2hvbGRl cicpLmlubmVySFRNTCAhPSAiIikNCgl7DQoJCSQoZWxlbUlkKS51cGRhdGUoJChl bGVtSWQrJ19ob2xkZXInKS5pbm5lckhUTUwpOw0KCQkkKCdwb3B1cF93aW5kb3cn KS51cGRhdGUoIiIpOw0KCX0NCgkNCgkkKCdwb3B1cF93aW5kb3cnKS5hcHBlbmRD aGlsZChCdWlsZGVyLm5vZGUoJ2Rpdicse2lkOmVsZW1JZCsnX2hvbGRlcid9KSk7 DQoJDQoJLy8kKGVsZW1JZCsnX2hvbGRlcicpLnVwZGF0ZSgkKGVsZW1JZCkuaW5u ZXJIVE1MKTsNCgkvLyQoZWxlbUlkKS51cGRhdGUoIiIpOw0KCW1vdmVOb2RlQ29u dGVudCgkKGVsZW1JZCksICQoZWxlbUlkKydfaG9sZGVyJykpOw0KCQ0KCQ0KCWlm KHdpbmRvdy5pc0lFNikkKCdwb3B1cF93aW5kb3cnKS5zdHlsZS50b3AgPSBnZXRT Y3JvbGxYWSgpWzFdICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhl aWdodC8yICsgInB4IjsNCgllbHNlICQoJ3BvcHVwX3dpbmRvdycpLnN0eWxlLnRv cCA9ICI1MCUiOw0KCSQoJ3BvcHVwX3dpbmRvdycpLnN0eWxlLm1hcmdpbkxlZnQg PSAnLScrJCgncG9wdXBfd2luZG93JykuZ2V0V2lkdGgoKS8yICsgJ3B4JzsNCgkk KCdwb3B1cF93aW5kb3cnKS5zdHlsZS5tYXJnaW5Ub3AgPSAnLScrJCgncG9wdXBf d2luZG93JykuZ2V0SGVpZ2h0KCkvMiArICdweCc7DQoJJCgncG9wdXBfd2luZG93 Jykuc3R5bGUucG9zaXRpb249ICdmaXhlZCc7DQoJDQoJaWYoJCgncG9wdXBfd2lu ZG93JykuZ2V0SGVpZ2h0KCkgPiBnZXRXaW5kb3dTaXplKClbMV0pDQoJew0KCQkk KCdwb3B1cF93aW5kb3cnKS5zdHlsZS50b3AgPSBnZXRTY3JvbGxYWSgpWzFdKyJw eCI7DQoJCSQoJ3BvcHVwX3dpbmRvdycpLnN0eWxlLm1hcmdpblRvcCA9ICcwcHgn Ow0KCQkkKCdwb3B1cF93aW5kb3cnKS5zdHlsZS5wb3NpdGlvbj0gJ2Fic29sdXRl JzsNCgl9DQoJDQoJJCgncG9wdXBfb3ZlcmxheScpLnNob3coKTsNCgkkKCdwb3B1 cF93aW5kb3cnKS5zaG93KCk7DQoJDQoJJCgncG9wdXBfd2luZG93Jykuc3R5bGUu ekluZGV4ID0gMTAwMDE7DQoJaWYod2luZG93LmlzSUU2KQ0KCXsNCgkJJCQoJ3Nl bGVjdCcpLmVhY2goZnVuY3Rpb24oc2VsKXsNCgkJCWlmKHR5cGVvZihzZWwudXAo Jy5wb3B1cF93bmQnKSkgPT0gJ3VuZGVmaW5lZCcpIHNlbC5zdHlsZS52aXNpYmls aXR5ID0gJ2hpZGRlbic7DQoJCX0pOw0KCQkvLyBhc3NpZ24gb3RoZXIgcG9zaXRp b24gZm9yIElFNiBvbmx5DQoJCSQoJ3BvcHVwX3dpbmRvdycpLnN0eWxlLnBvc2l0 aW9uPSAnYWJzb2x1dGUnOwkNCgkJJCgncG9wdXBfd2luZG93Jykuc3R5bGUubWFy Z2luTGVmdCA9ICctJyskKCdwb3B1cF93aW5kb3cnKS5nZXRXaWR0aCgpLzIgKyAn cHgnOw0KCQkkKCdwb3B1cF93aW5kb3cnKS5zdHlsZS5tYXJnaW5Ub3AgPSAnLScr JCgncG9wdXBfd2luZG93JykuZ2V0SGVpZ2h0KCkvMiArICdweCc7DQoJfQ0KCQ0K CS8qaWYgKHdhc19TYnJQb3BVcF9Jbml0ID09IDApIHsNCgkJU2JyUG9wVXAuaW5p dCgnanNfcmVwb3J0Rm9ybScpOw0KCQl3YXNfU2JyUG9wVXBfSW5pdCA9IDE7DQoJ fSBlbHNlIHsNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pzX3JlcG9ydEZv cm0nKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGwnKVswXS5yZW1vdmUoKTsNCgkJ U2JyUG9wVXAuaW5pdCgnanNfcmVwb3J0Rm9ybScpOw0KCX0qLw0KfQ0KDQoNCmZ1 bmN0aW9uIHBvcHVwQ2xvc2VTaW1wbGUoZWxlbUlkKQ0Kew0KCSQoJ3BvcHVwX292 ZXJsYXknKS5oaWRlKCk7DQoJJChlbGVtSWQpLmhpZGUoKTsJDQp9DQoNCmZ1bmN0 aW9uIHBvcHVwQ2xvc2UoZWxlbUlkKQ0KewkNCmlmKCQoZWxlbUlkKydfaG9sZGVy JykgJiYgJChlbGVtSWQrJ19ob2xkZXInKS5pbm5lckhUTUwgIT0gIiIpDQp7DQoJ bW92ZU5vZGVDb250ZW50KCQoZWxlbUlkKydfaG9sZGVyJyksICQoZWxlbUlkKSk7 DQoJLy8kKGVsZW1JZCkudXBkYXRlKCQoZWxlbUlkKydfaG9sZGVyJykuaW5uZXJI VE1MKTsNCgkkKCdwb3B1cF93aW5kb3cnKS51cGRhdGUoIiIpOw0KfQ0KDQokKCdw b3B1cF9vdmVybGF5JykuaGlkZSgpOw0KJCgncG9wdXBfd2luZG93JykuaGlkZSgp Ow0KDQppZih3aW5kb3cuaXNJRTYpDQp7DQoJJCQoJ3NlbGVjdCcpLmVhY2goZnVu Y3Rpb24oc2VsKXsNCgkgICBpZih0eXBlb2Yoc2VsLnVwKCcucG9wdXBfd25kJykp ID09ICd1bmRlZmluZWQnKSBzZWwuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxl JzsNCgl9KTsNCn0NCg0KfQ0KDQpmdW5jdGlvbiBzaG93VGFiKHRhYklELCBvYmop DQp7DQokJCgnI3RhYl9uYXYgYScpLmVhY2goZnVuY3Rpb24oaXQpew0KCWl0LmNs YXNzTmFtZSA9ICcnOw0KfSk7DQoNCiQkKCcudGFiQ29udCcpLmVhY2goZnVuY3Rp b24oaXQpew0KCWl0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQp9KTsNCg0KJChv YmopLmNsYXNzTmFtZSA9ICdzZWwnOw0KJCh0YWJJRCkuc3R5bGUuZGlzcGxheSA9 ICdibG9jayc7DQp9DQoNCg0KRXZlbnQub2JzZXJ2ZSh3aW5kb3csICdsb2FkJywg ZnVuY3Rpb24gKCkgew0KLyoJCW5ldyBJbnNlcnRpb24uQm90dG9tKGRvY3VtZW50 LmJvZHksJzxkaXYgaWQ9InBvcHVwX292ZXJsYXkiPjwvZGl2PicpOw0KbmV3IElu c2VydGlvbi5Cb3R0b20oZG9jdW1lbnQuYm9keSwnPGRpdiBpZD0icG9wdXBfd2lu ZG93Ij48L2Rpdj4nKTsqLw0KZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChCdWls ZGVyLm5vZGUoJ2Rpdicse2lkOidwb3B1cF9vdmVybGF5J30pKTsNCmRvY3VtZW50 LmJvZHkuYXBwZW5kQ2hpbGQoQnVpbGRlci5ub2RlKCdkaXYnLHtpZDoncG9wdXBf d2luZG93JywgY2xhc3NOYW1lOidwb3B1cF93bmQnfSkpOw0KDQokKCdwb3B1cF9v dmVybGF5Jykuc2V0U3R5bGUoeydwb3NpdGlvbic6ICdhYnNvbHV0ZScsICd0b3An OiAnMCcsICdsZWZ0JzogJzAnLCAnei1pbmRleCc6ICcxMDAwJywgJ3dpZHRoJzog JzEwMCUnLCAnaGVpZ2h0JzogJzUwMHB4JywgJ2JhY2tncm91bmQnOiAnIzAwMCcs ICdkaXNwbGF5Jzonbm9uZScsICdvcGFjaXR5JzonMC44J30pOw0KDQokKCdwb3B1 cF93aW5kb3cnKS5zZXRTdHlsZSh7J3Bvc2l0aW9uJzonZml4ZWQnLCAndG9wJzon NTAlJywgJ2xlZnQnOic1MCUnLCAnei1pbmRleCc6JzEwMDAxJywgJ2Rpc3BsYXkn Oidub25lJ30pOw0KDQp9KTsNCg0KDQovLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLw0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8N Ci8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovLyoqKioqKioq KioqKioqKioqKioqKipKUy9saWdodGJveDIuMDIvanMvbGlnaHRib3guanMqKioq KioqKioqKioqKioqKioqKioqKioqKioqLw0KLy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8NCi8vCUxpZ2h0 Ym94IHYyLjAyDQovLwlieSBMb2tlc2ggRGhha2FyIC0gaHR0cDovL3d3dy5odWRk bGV0b2dldGhlci5jb20NCi8vCTMvMzEvMDYNCi8vDQovLwlGb3IgbW9yZSBpbmZv cm1hdGlvbiBvbiB0aGlzIHNjcmlwdCwgdmlzaXQ6DQovLwlodHRwOi8vaHVkZGxl dG9nZXRoZXIuY29tL3Byb2plY3RzL2xpZ2h0Ym94Mi8NCi8vDQovLwlMaWNlbnNl ZCB1bmRlciB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiAyLjUgTGlj ZW5zZSAtIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzIu NS8NCi8vCQ0KLy8JQ3JlZGl0IGFsc28gZHVlIHRvIHRob3NlIHdobyBoYXZlIGhl bHBlZCwgaW5zcGlyZWQsIGFuZCBtYWRlIHRoZWlyIGNvZGUgYXZhaWxhYmxlIHRv IHRoZSBwdWJsaWMuDQovLwlJbmNsdWRpbmc6IFNjb3R0IFVwdG9uKHVwdG9uaWMu Y29tKSwgUGV0ZXItUGF1bCBLb2NoKHF1aXJrc21vZGUub3JnKSwgVGhvbWFzIEZ1 Y2hzKG1pci5hY3Vsby51cyksIGFuZCBvdGhlcnMuDQovLw0KLy8NCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovKg0KDQoJVGFibGUgb2Yg Q29udGVudHMNCgktLS0tLS0tLS0tLS0tLS0tLQ0KCUNvbmZpZ3VyYXRpb24NCglH bG9iYWwgVmFyaWFibGVzDQoNCglFeHRlbmRpbmcgQnVpbHQtaW4gT2JqZWN0cwkN CgktIE9iamVjdC5leHRlbmQoRWxlbWVudCkNCgktIEFycmF5LnByb3RvdHlwZS5y ZW1vdmVEdXBsaWNhdGVzKCkNCgktIEFycmF5LnByb3RvdHlwZS5lbXB0eSgpDQoN CglMaWdodGJveCBDbGFzcyBEZWNsYXJhdGlvbg0KCS0gaW5pdGlhbGl6ZSgpDQoJ LSBzdGFydCgpDQoJLSBjaGFuZ2VJbWFnZSgpDQoJLSByZXNpemVJbWFnZUNvbnRh aW5lcigpDQoJLSBzaG93SW1hZ2UoKQ0KCS0gdXBkYXRlRGV0YWlscygpDQoJLSB1 cGRhdGVOYXYoKQ0KCS0gZW5hYmxlS2V5Ym9hcmROYXYoKQ0KCS0gZGlzYWJsZUtl eWJvYXJkTmF2KCkNCgktIGtleWJvYXJkQWN0aW9uKCkNCgktIHByZWxvYWROZWln aGJvckltYWdlcygpDQoJLSBlbmQoKQ0KCQ0KCU1pc2NlbGxhbmVvdXMgRnVuY3Rp b25zDQoJLSBnZXRQYWdlU2Nyb2xsKCkNCgktIGdldFBhZ2VTaXplKCkNCgktIGdl dEtleSgpDQoJLSBsaXN0ZW5LZXkoKQ0KCS0gc2hvd1NlbGVjdEJveGVzKCkNCgkt IGhpZGVTZWxlY3RCb3hlcygpDQoJLSBwYXVzZSgpDQoJLSBpbml0TGlnaHRib3go KQ0KCQ0KCUZ1bmN0aW9uIENhbGxzDQoJLSBhZGRMb2FkRXZlbnQoaW5pdExpZ2h0 Ym94KQ0KCQ0KKi8NCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQoNCi8vDQovLwlDb25maWd1cmF0aW9uDQovLw0KdmFyIGZpbGVMb2FkaW5n SW1hZ2UgPSBkZXNpZ25VcmwgKyAiSlMvbGlnaHRib3gyLjAyL2ltYWdlcy9sb2Fk aW5nLmdpZiI7CQkNCnZhciBmaWxlQm90dG9tTmF2Q2xvc2VJbWFnZSA9IGRlc2ln blVybCArICJKUy9saWdodGJveDIuMDIvaW1hZ2VzL2Nsb3NlbGFiZWwuZ2lmIjsN Cg0KdmFyIHJlc2l6ZVNwZWVkID0gNzsJLy8gY29udHJvbHMgdGhlIHNwZWVkIG9m IHRoZSBpbWFnZSByZXNpemluZyAoMT1zbG93ZXN0IGFuZCAxMD1mYXN0ZXN0KQ0K DQp2YXIgYm9yZGVyU2l6ZSA9IDEwOwkvL2lmIHlvdSBhZGp1c3QgdGhlIHBhZGRp bmcgaW4gdGhlIENTUywgeW91IHdpbGwgbmVlZCB0byB1cGRhdGUgdGhpcyB2YXJp YWJsZQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K DQovLw0KLy8JR2xvYmFsIFZhcmlhYmxlcw0KLy8NCnZhciBpbWFnZUFycmF5ID0g bmV3IEFycmF5Ow0KdmFyIGFjdGl2ZUltYWdlOw0KDQppZihyZXNpemVTcGVlZCA+ IDEwKXsgcmVzaXplU3BlZWQgPSAxMDt9DQppZihyZXNpemVTcGVlZCA8IDEpeyBy ZXNpemVTcGVlZCA9IDE7fQ0KcmVzaXplRHVyYXRpb24gPSAoMTEgLSByZXNpemVT cGVlZCkgKiAwLjE1Ow0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KDQovLw0KLy8JQWRkaXRpb25hbCBtZXRob2RzIGZvciBFbGVtZW50 IGFkZGVkIGJ5IFNVLCBDb3Vsb2lyDQovLwktIGZ1cnRoZXIgYWRkaXRpb25zIGJ5 IExva2VzaCBEaGFrYXIgKGh1ZGRsZXRvZ2V0aGVyLmNvbSkNCi8vDQpPYmplY3Qu ZXh0ZW5kKEVsZW1lbnQsIHsNCglnZXRXaWR0aDogZnVuY3Rpb24oZWxlbWVudCkg ew0KCSAgIAllbGVtZW50ID0gJChlbGVtZW50KTsNCgkgICAJcmV0dXJuIGVsZW1l bnQub2Zmc2V0V2lkdGg7IA0KCX0sDQoJc2V0V2lkdGg6IGZ1bmN0aW9uKGVsZW1l bnQsdykgew0KCSAgIAllbGVtZW50ID0gJChlbGVtZW50KTsNCiAgICAJZWxlbWVu dC5zdHlsZS53aWR0aCA9IHcgKyJweCI7DQoJfSwNCglzZXRIZWlnaHQ6IGZ1bmN0 aW9uKGVsZW1lbnQsaCkgew0KICAgCQllbGVtZW50ID0gJChlbGVtZW50KTsNCiAg ICAJZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoICsicHgiOw0KCX0sDQoJc2V0VG9w OiBmdW5jdGlvbihlbGVtZW50LHQpIHsNCgkgICAJZWxlbWVudCA9ICQoZWxlbWVu dCk7DQogICAgCWVsZW1lbnQuc3R5bGUudG9wID0gdCArInB4IjsNCgl9LA0KCXNl dFNyYzogZnVuY3Rpb24oZWxlbWVudCxzcmMpIHsNCiAgICAJZWxlbWVudCA9ICQo ZWxlbWVudCk7DQogICAgCWVsZW1lbnQuc3JjID0gc3JjOyANCgl9LA0KCXNldEhy ZWY6IGZ1bmN0aW9uKGVsZW1lbnQsaHJlZikgew0KICAgIAllbGVtZW50ID0gJChl bGVtZW50KTsNCiAgICAJZWxlbWVudC5ocmVmID0gaHJlZjsgDQoJfSwNCglzZXRJ bm5lckhUTUw6IGZ1bmN0aW9uKGVsZW1lbnQsY29udGVudCkgew0KCQllbGVtZW50 ID0gJChlbGVtZW50KTsNCgkJZWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50Ow0K CX0NCn0pOw0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KDQovLw0KLy8JRXh0ZW5kaW5nIGJ1aWx0LWluIEFycmF5IG9iamVjdA0KLy8J LSBhcnJheS5yZW1vdmVEdXBsaWNhdGVzKCkNCi8vCS0gYXJyYXkuZW1wdHkoKQ0K Ly8NCkFycmF5LnByb3RvdHlwZS5yZW1vdmVEdXBsaWNhdGVzID0gZnVuY3Rpb24g KCkgew0KCWZvcihpID0gMTsgaSA8IHRoaXMubGVuZ3RoOyBpKyspew0KCQlpZih0 aGlzW2ldWzBdID09IHRoaXNbaS0xXVswXSl7DQoJCQl0aGlzLnNwbGljZShpLDEp Ow0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KDQpBcnJheS5wcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbiAoKSB7 DQoJZm9yKGkgPSAwOyBpIDw9IHRoaXMubGVuZ3RoOyBpKyspew0KCQl0aGlzLnNo aWZ0KCk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KDQovLw0KLy8JTGlnaHRib3ggQ2xhc3MgRGVjbGFyYXRpb24NCi8v CS0gaW5pdGlhbGl6ZSgpDQovLwktIHN0YXJ0KCkNCi8vCS0gY2hhbmdlSW1hZ2Uo KQ0KLy8JLSByZXNpemVJbWFnZUNvbnRhaW5lcigpDQovLwktIHNob3dJbWFnZSgp DQovLwktIHVwZGF0ZURldGFpbHMoKQ0KLy8JLSB1cGRhdGVOYXYoKQ0KLy8JLSBl bmFibGVLZXlib2FyZE5hdigpDQovLwktIGRpc2FibGVLZXlib2FyZE5hdigpDQov LwktIGtleWJvYXJkTmF2QWN0aW9uKCkNCi8vCS0gcHJlbG9hZE5laWdoYm9ySW1h Z2VzKCkNCi8vCS0gZW5kKCkNCi8vDQovLwlTdHJ1Y3R1cmluZyBvZiBjb2RlIGlu c3BpcmVkIGJ5IFNjb3R0IFVwdG9uIChodHRwOi8vd3d3LnVwdG9uaWMuY29tLykN Ci8vDQp2YXIgTGlnaHRib3ggPSBDbGFzcy5jcmVhdGUoKTsNCg0KTGlnaHRib3gu cHJvdG90eXBlID0gew0KCQ0KCS8vIGluaXRpYWxpemUoKQ0KCS8vIENvbnN0cnVj dG9yIHJ1bnMgb24gY29tcGxldGlvbiBvZiB0aGUgRE9NIGxvYWRpbmcuIExvb3Bz IHRocm91Z2ggYW5jaG9yIHRhZ3MgbG9va2luZyBmb3IgDQoJLy8gJ2xpZ2h0Ym94 JyByZWZlcmVuY2VzIGFuZCBhcHBsaWVzIG9uY2xpY2sgZXZlbnRzIHRvIGFwcHJv cHJpYXRlIGxpbmtzLiBUaGUgMm5kIHNlY3Rpb24gb2YNCgkvLyB0aGUgZnVuY3Rp b24gaW5zZXJ0cyBodG1sIGF0IHRoZSBib3R0b20gb2YgdGhlIHBhZ2Ugd2hpY2gg aXMgdXNlZCB0byBkaXNwbGF5IHRoZSBzaGFkb3cgDQoJLy8gb3ZlcmxheSBhbmQg dGhlIGltYWdlIGNvbnRhaW5lci4NCgkvLw0KCWluaXRpYWxpemU6IGZ1bmN0aW9u KCkgewkNCgkJaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSl7IHJl dHVybjsgfQ0KCQl2YXIgYW5jaG9ycyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU YWdOYW1lKCdhJyk7DQoNCgkJLy8gbG9vcCB0aHJvdWdoIGFsbCBhbmNob3IgdGFn cw0KCQlmb3IgKHZhciBpPTA7IGk8YW5jaG9ycy5sZW5ndGg7IGkrKyl7DQoJCQl2 YXIgYW5jaG9yID0gYW5jaG9yc1tpXTsNCgkJCQ0KCQkJdmFyIHJlbEF0dHJpYnV0 ZSA9IFN0cmluZyhhbmNob3IuZ2V0QXR0cmlidXRlKCdyZWwnKSk7DQoJCQkNCgkJ CS8vIHVzZSB0aGUgc3RyaW5nLm1hdGNoKCkgbWV0aG9kIHRvIGNhdGNoICdsaWdo dGJveCcgcmVmZXJlbmNlcyBpbiB0aGUgcmVsIGF0dHJpYnV0ZQ0KCQkJaWYgKGFu Y2hvci5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSAmJiAocmVsQXR0cmlidXRlLnRvTG93 ZXJDYXNlKCkubWF0Y2goJ2xpZ2h0Ym94JykpKXsNCgkJCQlhbmNob3Iub25jbGlj ayA9IGZ1bmN0aW9uICgpIHtteUxpZ2h0Ym94LnN0YXJ0KHRoaXMpOyByZXR1cm4g ZmFsc2U7fQ0KCQkJfQ0KCQl9DQoNCgkJLy8gVGhlIHJlc3Qgb2YgdGhpcyBjb2Rl IGluc2VydHMgaHRtbCBhdCB0aGUgYm90dG9tIG9mIHRoZSBwYWdlIHRoYXQgbG9v a3Mgc2ltaWxhciB0byB0aGlzOg0KCQkvLw0KCQkvLwk8ZGl2IGlkPSJvdmVybGF5 Ij48L2Rpdj4NCgkJLy8JPGRpdiBpZD0ibGlnaHRib3giPg0KCQkvLwkJPGRpdiBp ZD0ib3V0ZXJJbWFnZUNvbnRhaW5lciI+DQoJCS8vCQkJPGRpdiBpZD0iaW1hZ2VD b250YWluZXIiPg0KCQkvLwkJCQk8aW1nIGlkPSJsaWdodGJveEltYWdlIj4NCgkJ Ly8JCQkJPGRpdiBzdHlsZT0iIiBpZD0iaG92ZXJOYXYiPg0KCQkvLwkJCQkJPGEg aHJlZj0iIyIgaWQ9InByZXZMaW5rIj48L2E+DQoJCS8vCQkJCQk8YSBocmVmPSIj IiBpZD0ibmV4dExpbmsiPjwvYT4NCgkJLy8JCQkJPC9kaXY+DQoJCS8vCQkJCTxk aXYgaWQ9ImxvYWRpbmciPg0KCQkvLwkJCQkJPGEgaHJlZj0iIyIgaWQ9ImxvYWRp bmdMaW5rIj4NCgkJLy8JCQkJCQk8aW1nIHNyYz0iaW1hZ2VzL2xvYWRpbmcuZ2lm Ij4NCgkJLy8JCQkJCTwvYT4NCgkJLy8JCQkJPC9kaXY+DQoJCS8vCQkJPC9kaXY+ DQoJCS8vCQk8L2Rpdj4NCgkJLy8JCTxkaXYgaWQ9ImltYWdlRGF0YUNvbnRhaW5l ciI+DQoJCS8vCQkJPGRpdiBpZD0iaW1hZ2VEYXRhIj4NCgkJLy8JCQkJPGRpdiBp ZD0iaW1hZ2VEZXRhaWxzIj4NCgkJLy8JCQkJCTxzcGFuIGlkPSJjYXB0aW9uIj48 L3NwYW4+DQoJCS8vCQkJCQk8c3BhbiBpZD0ibnVtYmVyRGlzcGxheSI+PC9zcGFu Pg0KCQkvLwkJCQk8L2Rpdj4NCgkJLy8JCQkJPGRpdiBpZD0iYm90dG9tTmF2Ij4N CgkJLy8JCQkJCTxhIGhyZWY9IiMiIGlkPSJib3R0b21OYXZDbG9zZSI+DQoJCS8v CQkJCQkJPGltZyBzcmM9ImltYWdlcy9jbG9zZS5naWYiPg0KCQkvLwkJCQkJPC9h Pg0KCQkvLwkJCQk8L2Rpdj4NCgkJLy8JCQk8L2Rpdj4NCgkJLy8JCTwvZGl2Pg0K CQkvLwk8L2Rpdj4NCg0KDQoJCXZhciBvYmpCb2R5ID0gZG9jdW1lbnQuZ2V0RWxl bWVudHNCeVRhZ05hbWUoImJvZHkiKS5pdGVtKDApOw0KCQkNCgkJdmFyIG9iak92 ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsNCgkJb2JqT3Zl cmxheS5zZXRBdHRyaWJ1dGUoJ2lkJywnb3ZlcmxheScpOw0KCQlvYmpPdmVybGF5 LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQoJCW9iak92ZXJsYXkub25jbGljayA9 IGZ1bmN0aW9uKCkgeyBteUxpZ2h0Ym94LmVuZCgpOyByZXR1cm4gZmFsc2U7IH0N CgkJb2JqQm9keS5hcHBlbmRDaGlsZChvYmpPdmVybGF5KTsNCgkJDQoJCXZhciBv YmpMaWdodGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOw0KCQlv YmpMaWdodGJveC5zZXRBdHRyaWJ1dGUoJ2lkJywnbGlnaHRib3gnKTsNCgkJb2Jq TGlnaHRib3guc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCgkJb2JqQm9keS5hcHBl bmRDaGlsZChvYmpMaWdodGJveCk7DQoJDQoJCXZhciBvYmpPdXRlckltYWdlQ29u dGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7DQoJCW9iak91 dGVySW1hZ2VDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsJ291dGVySW1hZ2VD b250YWluZXInKTsNCgkJb2JqTGlnaHRib3guYXBwZW5kQ2hpbGQob2JqT3V0ZXJJ bWFnZUNvbnRhaW5lcik7DQoNCgkJdmFyIG9iakltYWdlQ29udGFpbmVyID0gZG9j dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7DQoJCW9iakltYWdlQ29udGFpbmVy LnNldEF0dHJpYnV0ZSgnaWQnLCdpbWFnZUNvbnRhaW5lcicpOw0KCQlvYmpPdXRl ckltYWdlQ29udGFpbmVyLmFwcGVuZENoaWxkKG9iakltYWdlQ29udGFpbmVyKTsN CgkNCgkJdmFyIG9iakxpZ2h0Ym94SW1hZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCJpbWciKTsNCgkJb2JqTGlnaHRib3hJbWFnZS5zZXRBdHRyaWJ1dGUoJ2lk JywnbGlnaHRib3hJbWFnZScpOw0KCQlvYmpJbWFnZUNvbnRhaW5lci5hcHBlbmRD aGlsZChvYmpMaWdodGJveEltYWdlKTsNCgkNCgkJdmFyIG9iakhvdmVyTmF2ID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7DQoJCW9iakhvdmVyTmF2LnNl dEF0dHJpYnV0ZSgnaWQnLCdob3Zlck5hdicpOw0KCQlvYmpJbWFnZUNvbnRhaW5l ci5hcHBlbmRDaGlsZChvYmpIb3Zlck5hdik7DQoJDQoJCXZhciBvYmpQcmV2TGlu ayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsNCgkJb2JqUHJldkxpbmsu c2V0QXR0cmlidXRlKCdpZCcsJ3ByZXZMaW5rJyk7DQoJCW9ialByZXZMaW5rLnNl dEF0dHJpYnV0ZSgnaHJlZicsJyMnKTsNCgkJb2JqSG92ZXJOYXYuYXBwZW5kQ2hp bGQob2JqUHJldkxpbmspOw0KCQkNCgkJdmFyIG9iak5leHRMaW5rID0gZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgiYSIpOw0KCQlvYmpOZXh0TGluay5zZXRBdHRyaWJ1 dGUoJ2lkJywnbmV4dExpbmsnKTsNCgkJb2JqTmV4dExpbmsuc2V0QXR0cmlidXRl KCdocmVmJywnIycpOw0KCQlvYmpIb3Zlck5hdi5hcHBlbmRDaGlsZChvYmpOZXh0 TGluayk7DQoNCgkNCgkJdmFyIG9iakxvYWRpbmcgPSBkb2N1bWVudC5jcmVhdGVF bGVtZW50KCJkaXYiKTsNCgkJb2JqTG9hZGluZy5zZXRBdHRyaWJ1dGUoJ2lkJywn bG9hZGluZycpOw0KCQlvYmpJbWFnZUNvbnRhaW5lci5hcHBlbmRDaGlsZChvYmpM b2FkaW5nKTsNCgkNCgkJdmFyIG9iakxvYWRpbmdMaW5rID0gZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCgiYSIpOw0KCQlvYmpMb2FkaW5nTGluay5zZXRBdHRyaWJ1dGUo J2lkJywnbG9hZGluZ0xpbmsnKTsNCgkJb2JqTG9hZGluZ0xpbmsuc2V0QXR0cmli dXRlKCdocmVmJywnIycpOw0KCQlvYmpMb2FkaW5nTGluay5vbmNsaWNrID0gZnVu Y3Rpb24oKSB7IG15TGlnaHRib3guZW5kKCk7IHJldHVybiBmYWxzZTsgfQ0KCQlv YmpMb2FkaW5nLmFwcGVuZENoaWxkKG9iakxvYWRpbmdMaW5rKTsNCgkNCgkJdmFy IG9iakxvYWRpbmdJbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIp Ow0KCQlvYmpMb2FkaW5nSW1hZ2Uuc2V0QXR0cmlidXRlKCdzcmMnLCBmaWxlTG9h ZGluZ0ltYWdlKTsNCgkJb2JqTG9hZGluZ0xpbmsuYXBwZW5kQ2hpbGQob2JqTG9h ZGluZ0ltYWdlKTsNCg0KCQl2YXIgb2JqSW1hZ2VEYXRhQ29udGFpbmVyID0gZG9j dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7DQoJCW9iakltYWdlRGF0YUNvbnRh aW5lci5zZXRBdHRyaWJ1dGUoJ2lkJywnaW1hZ2VEYXRhQ29udGFpbmVyJyk7DQoJ CW9iakltYWdlRGF0YUNvbnRhaW5lci5jbGFzc05hbWUgPSAnY2xlYXJmaXgnOw0K CQlvYmpMaWdodGJveC5hcHBlbmRDaGlsZChvYmpJbWFnZURhdGFDb250YWluZXIp Ow0KDQoJCXZhciBvYmpJbWFnZURhdGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50 KCJkaXYiKTsNCgkJb2JqSW1hZ2VEYXRhLnNldEF0dHJpYnV0ZSgnaWQnLCdpbWFn ZURhdGEnKTsNCgkJb2JqSW1hZ2VEYXRhQ29udGFpbmVyLmFwcGVuZENoaWxkKG9i akltYWdlRGF0YSk7DQoJDQoJCXZhciBvYmpJbWFnZURldGFpbHMgPSBkb2N1bWVu dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsNCgkJb2JqSW1hZ2VEZXRhaWxzLnNldEF0 dHJpYnV0ZSgnaWQnLCdpbWFnZURldGFpbHMnKTsNCgkJb2JqSW1hZ2VEYXRhLmFw cGVuZENoaWxkKG9iakltYWdlRGV0YWlscyk7DQoJDQoJCXZhciBvYmpDYXB0aW9u ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOw0KCQlvYmpDYXB0aW9u LnNldEF0dHJpYnV0ZSgnaWQnLCdjYXB0aW9uJyk7DQoJCW9iakltYWdlRGV0YWls cy5hcHBlbmRDaGlsZChvYmpDYXB0aW9uKTsNCgkNCgkJdmFyIG9iak51bWJlckRp c3BsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7DQoJCW9iak51 bWJlckRpc3BsYXkuc2V0QXR0cmlidXRlKCdpZCcsJ251bWJlckRpc3BsYXknKTsN CgkJb2JqSW1hZ2VEZXRhaWxzLmFwcGVuZENoaWxkKG9iak51bWJlckRpc3BsYXkp Ow0KCQkNCgkJdmFyIG9iakJvdHRvbU5hdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l bnQoImRpdiIpOw0KCQlvYmpCb3R0b21OYXYuc2V0QXR0cmlidXRlKCdpZCcsJ2Jv dHRvbU5hdicpOw0KCQlvYmpJbWFnZURhdGEuYXBwZW5kQ2hpbGQob2JqQm90dG9t TmF2KTsNCgkNCgkJdmFyIG9iakJvdHRvbU5hdkNsb3NlTGluayA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoImEiKTsNCgkJb2JqQm90dG9tTmF2Q2xvc2VMaW5rLnNl dEF0dHJpYnV0ZSgnaWQnLCdib3R0b21OYXZDbG9zZScpOw0KCQlvYmpCb3R0b21O YXZDbG9zZUxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywnIycpOw0KCQlvYmpCb3R0 b21OYXZDbG9zZUxpbmsub25jbGljayA9IGZ1bmN0aW9uKCkgeyBteUxpZ2h0Ym94 LmVuZCgpOyByZXR1cm4gZmFsc2U7IH0NCgkJb2JqQm90dG9tTmF2LmFwcGVuZENo aWxkKG9iakJvdHRvbU5hdkNsb3NlTGluayk7DQoJDQoJCXZhciBvYmpCb3R0b21O YXZDbG9zZUltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7DQoJ CW9iakJvdHRvbU5hdkNsb3NlSW1hZ2Uuc2V0QXR0cmlidXRlKCdzcmMnLCBmaWxl Qm90dG9tTmF2Q2xvc2VJbWFnZSk7DQoJCW9iakJvdHRvbU5hdkNsb3NlTGluay5h cHBlbmRDaGlsZChvYmpCb3R0b21OYXZDbG9zZUltYWdlKTsNCgl9LA0KCQ0KCS8v DQoJLy8Jc3RhcnQoKQ0KCS8vCURpc3BsYXkgb3ZlcmxheSBhbmQgbGlnaHRib3gu IElmIGltYWdlIGlzIHBhcnQgb2YgYSBzZXQsIGFkZCBzaWJsaW5ncyB0byBpbWFn ZUFycmF5Lg0KCS8vDQoJc3RhcnQ6IGZ1bmN0aW9uKGltYWdlTGluaykgewkNCg0K CQloaWRlU2VsZWN0Qm94ZXMoKTsNCg0KCQkvLyBzdHJldGNoIG92ZXJsYXkgdG8g ZmlsbCBwYWdlIGFuZCBmYWRlIGluDQoJCXZhciBhcnJheVBhZ2VTaXplID0gZ2V0 UGFnZVNpemUoKTsNCgkJRWxlbWVudC5zZXRIZWlnaHQoJ292ZXJsYXknLCBhcnJh eVBhZ2VTaXplWzFdKTsNCgkJbmV3IEVmZmVjdC5BcHBlYXIoJ292ZXJsYXknLCB7 IGR1cmF0aW9uOiAwLjIsIGZyb206IDAuMCwgdG86IDAuOCB9KTsNCg0KCQlpbWFn ZUFycmF5ID0gW107DQoJCWltYWdlTnVtID0gMDsJCQ0KDQoJCWlmICghZG9jdW1l bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUpeyByZXR1cm47IH0NCgkJdmFyIGFuY2hv cnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpOw0KDQoJCS8v IGlmIGltYWdlIGlzIE5PVCBwYXJ0IG9mIGEgc2V0Li4NCgkJaWYoKGltYWdlTGlu ay5nZXRBdHRyaWJ1dGUoJ3JlbCcpID09ICdsaWdodGJveCcpKXsNCgkJCS8vIGFk ZCBzaW5nbGUgaW1hZ2UgdG8gaW1hZ2VBcnJheQ0KCQkJaW1hZ2VBcnJheS5wdXNo KG5ldyBBcnJheShpbWFnZUxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJyksIGltYWdl TGluay5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykpKTsJCQkNCgkJfSBlbHNlIHsNCgkJ Ly8gaWYgaW1hZ2UgaXMgcGFydCBvZiBhIHNldC4uDQoNCgkJCS8vIGxvb3AgdGhy b3VnaCBhbmNob3JzLCBmaW5kIG90aGVyIGltYWdlcyBpbiBzZXQsIGFuZCBhZGQg dGhlbSB0byBpbWFnZUFycmF5DQoJCQlmb3IgKHZhciBpPTA7IGk8YW5jaG9ycy5s ZW5ndGg7IGkrKyl7DQoJCQkJdmFyIGFuY2hvciA9IGFuY2hvcnNbaV07DQoJCQkJ aWYgKGFuY2hvci5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSAmJiAoYW5jaG9yLmdldEF0 dHJpYnV0ZSgncmVsJykgPT0gaW1hZ2VMaW5rLmdldEF0dHJpYnV0ZSgncmVsJykp KXsNCgkJCQkJaW1hZ2VBcnJheS5wdXNoKG5ldyBBcnJheShhbmNob3IuZ2V0QXR0 cmlidXRlKCdocmVmJyksIGFuY2hvci5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykpKTsN CgkJCQl9DQoJCQl9DQoJCQlpbWFnZUFycmF5LnJlbW92ZUR1cGxpY2F0ZXMoKTsN CgkJCXdoaWxlKGltYWdlQXJyYXlbaW1hZ2VOdW1dWzBdICE9IGltYWdlTGluay5n ZXRBdHRyaWJ1dGUoJ2hyZWYnKSkgeyBpbWFnZU51bSsrO30NCgkJfQ0KDQoJCS8v IGNhbGN1bGF0ZSB0b3Agb2Zmc2V0IGZvciB0aGUgbGlnaHRib3ggYW5kIGRpc3Bs YXkgDQoJCXZhciBhcnJheVBhZ2VTaXplID0gZ2V0UGFnZVNpemUoKTsNCgkJdmFy IGFycmF5UGFnZVNjcm9sbCA9IGdldFBhZ2VTY3JvbGwoKTsNCgkJdmFyIGxpZ2h0 Ym94VG9wID0gYXJyYXlQYWdlU2Nyb2xsWzFdICsgKGFycmF5UGFnZVNpemVbM10g LyAxNSk7DQoNCgkJRWxlbWVudC5zZXRUb3AoJ2xpZ2h0Ym94JywgbGlnaHRib3hU b3ApOw0KCQlFbGVtZW50LnNob3coJ2xpZ2h0Ym94Jyk7DQoJCQ0KCQl0aGlzLmNo YW5nZUltYWdlKGltYWdlTnVtKTsNCgl9LA0KDQoJLy8NCgkvLwljaGFuZ2VJbWFn ZSgpDQoJLy8JSGlkZSBtb3N0IGVsZW1lbnRzIGFuZCBwcmVsb2FkIGltYWdlIGlu IHByZXBhcmF0aW9uIGZvciByZXNpemluZyBpbWFnZSBjb250YWluZXIuDQoJLy8N CgljaGFuZ2VJbWFnZTogZnVuY3Rpb24oaW1hZ2VOdW0pIHsJDQoJCQ0KCQlhY3Rp dmVJbWFnZSA9IGltYWdlTnVtOwkvLyB1cGRhdGUgZ2xvYmFsIHZhcg0KDQoJCS8v IGhpZGUgZWxlbWVudHMgZHVyaW5nIHRyYW5zaXRpb24NCgkJRWxlbWVudC5zaG93 KCdsb2FkaW5nJyk7DQoJCUVsZW1lbnQuaGlkZSgnbGlnaHRib3hJbWFnZScpOw0K CQlFbGVtZW50LmhpZGUoJ2hvdmVyTmF2Jyk7DQoJCUVsZW1lbnQuaGlkZSgncHJl dkxpbmsnKTsNCgkJRWxlbWVudC5oaWRlKCduZXh0TGluaycpOw0KCQlFbGVtZW50 LmhpZGUoJ2ltYWdlRGF0YUNvbnRhaW5lcicpOw0KCQlFbGVtZW50LmhpZGUoJ251 bWJlckRpc3BsYXknKTsJCQ0KCQkNCgkJaW1nUHJlbG9hZGVyID0gbmV3IEltYWdl KCk7DQoJCQ0KCQkvLyBvbmNlIGltYWdlIGlzIHByZWxvYWRlZCwgcmVzaXplIGlt YWdlIGNvbnRhaW5lcg0KCQlpbWdQcmVsb2FkZXIub25sb2FkPWZ1bmN0aW9uKCl7 DQoJCQlFbGVtZW50LnNldFNyYygnbGlnaHRib3hJbWFnZScsIGltYWdlQXJyYXlb YWN0aXZlSW1hZ2VdWzBdKTsNCgkJCW15TGlnaHRib3gucmVzaXplSW1hZ2VDb250 YWluZXIoaW1nUHJlbG9hZGVyLndpZHRoLCBpbWdQcmVsb2FkZXIuaGVpZ2h0KTsN CgkJfQ0KCQlpbWdQcmVsb2FkZXIuc3JjID0gaW1hZ2VBcnJheVthY3RpdmVJbWFn ZV1bMF07DQoJfSwNCg0KCS8vDQoJLy8JcmVzaXplSW1hZ2VDb250YWluZXIoKQ0K CS8vDQoJcmVzaXplSW1hZ2VDb250YWluZXI6IGZ1bmN0aW9uKCBpbWdXaWR0aCwg aW1nSGVpZ2h0KSB7DQoNCgkJLy8gZ2V0IGN1cnJlbnQgaGVpZ2h0IGFuZCB3aWR0 aA0KCQl0aGlzLndDdXIgPSBFbGVtZW50LmdldFdpZHRoKCdvdXRlckltYWdlQ29u dGFpbmVyJyk7DQoJCXRoaXMuaEN1ciA9IEVsZW1lbnQuZ2V0SGVpZ2h0KCdvdXRl ckltYWdlQ29udGFpbmVyJyk7DQoNCgkJLy8gc2NhbGFycyBiYXNlZCBvbiBjaGFu Z2UgZnJvbSBvbGQgdG8gbmV3DQoJCXRoaXMueFNjYWxlID0gKChpbWdXaWR0aCAg KyAoYm9yZGVyU2l6ZSAqIDIpKSAvIHRoaXMud0N1cikgKiAxMDA7DQoJCXRoaXMu eVNjYWxlID0gKChpbWdIZWlnaHQgICsgKGJvcmRlclNpemUgKiAyKSkgLyB0aGlz LmhDdXIpICogMTAwOw0KDQoJCS8vIGNhbGN1bGF0ZSBzaXplIGRpZmZlcmVuY2Ug YmV0d2VlbiBuZXcgYW5kIG9sZCBpbWFnZSwgYW5kIHJlc2l6ZSBpZiBuZWNlc3Nh cnkNCgkJd0RpZmYgPSAodGhpcy53Q3VyIC0gYm9yZGVyU2l6ZSAqIDIpIC0gaW1n V2lkdGg7DQoJCWhEaWZmID0gKHRoaXMuaEN1ciAtIGJvcmRlclNpemUgKiAyKSAt IGltZ0hlaWdodDsNCg0KCQlpZighKCBoRGlmZiA9PSAwKSl7IG5ldyBFZmZlY3Qu U2NhbGUoJ291dGVySW1hZ2VDb250YWluZXInLCB0aGlzLnlTY2FsZSwge3NjYWxl WDogZmFsc2UsIGR1cmF0aW9uOiByZXNpemVEdXJhdGlvbiwgcXVldWU6ICdmcm9u dCd9KTsgfQ0KCQlpZighKCB3RGlmZiA9PSAwKSl7IG5ldyBFZmZlY3QuU2NhbGUo J291dGVySW1hZ2VDb250YWluZXInLCB0aGlzLnhTY2FsZSwge3NjYWxlWTogZmFs c2UsIGRlbGF5OiByZXNpemVEdXJhdGlvbiwgZHVyYXRpb246IHJlc2l6ZUR1cmF0 aW9ufSk7IH0NCg0KCQkvLyBpZiBuZXcgYW5kIG9sZCBpbWFnZSBhcmUgc2FtZSBz aXplIGFuZCBubyBzY2FsaW5nIHRyYW5zaXRpb24gaXMgbmVjZXNzYXJ5LCANCgkJ Ly8gZG8gYSBxdWljayBwYXVzZSB0byBwcmV2ZW50IGltYWdlIGZsaWNrZXIuDQoJ CWlmKChoRGlmZiA9PSAwKSAmJiAod0RpZmYgPT0gMCkpew0KCQkJaWYgKG5hdmln YXRvci5hcHBWZXJzaW9uLmluZGV4T2YoIk1TSUUiKSE9LTEpeyBwYXVzZSgyNTAp OyB9IGVsc2UgeyBwYXVzZSgxMDApO30gDQoJCX0NCg0KCQlFbGVtZW50LnNldEhl aWdodCgncHJldkxpbmsnLCBpbWdIZWlnaHQpOw0KCQlFbGVtZW50LnNldEhlaWdo dCgnbmV4dExpbmsnLCBpbWdIZWlnaHQpOw0KCQlFbGVtZW50LnNldFdpZHRoKCAn aW1hZ2VEYXRhQ29udGFpbmVyJywgaW1nV2lkdGggKyAoYm9yZGVyU2l6ZSAqIDIp KTsNCg0KCQl0aGlzLnNob3dJbWFnZSgpOw0KCX0sDQoJDQoJLy8NCgkvLwlzaG93 SW1hZ2UoKQ0KCS8vCURpc3BsYXkgaW1hZ2UgYW5kIGJlZ2luIHByZWxvYWRpbmcg bmVpZ2hib3JzLg0KCS8vDQoJc2hvd0ltYWdlOiBmdW5jdGlvbigpew0KCQlFbGVt ZW50LmhpZGUoJ2xvYWRpbmcnKTsNCgkJbmV3IEVmZmVjdC5BcHBlYXIoJ2xpZ2h0 Ym94SW1hZ2UnLCB7IGR1cmF0aW9uOiAwLjUsIHF1ZXVlOiAnZW5kJywgYWZ0ZXJG aW5pc2g6IGZ1bmN0aW9uKCl7CW15TGlnaHRib3gudXBkYXRlRGV0YWlscygpOyB9 IH0pOw0KCQl0aGlzLnByZWxvYWROZWlnaGJvckltYWdlcygpOw0KCX0sDQoNCgkv Lw0KCS8vCXVwZGF0ZURldGFpbHMoKQ0KCS8vCURpc3BsYXkgY2FwdGlvbiwgaW1h Z2UgbnVtYmVyLCBhbmQgYm90dG9tIG5hdi4NCgkvLw0KCXVwZGF0ZURldGFpbHM6 IGZ1bmN0aW9uKCkgew0KCQ0KCQlFbGVtZW50LnNob3coJ2NhcHRpb24nKTsNCgkJ RWxlbWVudC5zZXRJbm5lckhUTUwoICdjYXB0aW9uJywgaW1hZ2VBcnJheVthY3Rp dmVJbWFnZV1bMV0pOw0KCQkNCgkJLy8gaWYgaW1hZ2UgaXMgcGFydCBvZiBzZXQg ZGlzcGxheSAnSW1hZ2UgeCBvZiB4JyANCgkJaWYoaW1hZ2VBcnJheS5sZW5ndGgg PiAxKXsNCgkJCUVsZW1lbnQuc2hvdygnbnVtYmVyRGlzcGxheScpOw0KCQkJRWxl bWVudC5zZXRJbm5lckhUTUwoICdudW1iZXJEaXNwbGF5JywgIkltYWdlICIgKyBl dmFsKGFjdGl2ZUltYWdlICsgMSkgKyAiIG9mICIgKyBpbWFnZUFycmF5Lmxlbmd0 aCk7DQoJCX0NCg0KCQluZXcgRWZmZWN0LlBhcmFsbGVsKA0KCQkJWyBuZXcgRWZm ZWN0LlNsaWRlRG93biggJ2ltYWdlRGF0YUNvbnRhaW5lcicsIHsgc3luYzogdHJ1 ZSwgZHVyYXRpb246IHJlc2l6ZUR1cmF0aW9uICsgMC4yNSwgZnJvbTogMC4wLCB0 bzogMS4wIH0pLCANCgkJCSAgbmV3IEVmZmVjdC5BcHBlYXIoJ2ltYWdlRGF0YUNv bnRhaW5lcicsIHsgc3luYzogdHJ1ZSwgZHVyYXRpb246IDEuMCB9KSBdLCANCgkJ CXsgZHVyYXRpb246IDAuNjUsIGFmdGVyRmluaXNoOiBmdW5jdGlvbigpIHsgbXlM aWdodGJveC51cGRhdGVOYXYoKTt9IH0gDQoJCSk7DQoJfSwNCg0KCS8vDQoJLy8J dXBkYXRlTmF2KCkNCgkvLwlEaXNwbGF5IGFwcHJvcHJpYXRlIHByZXZpb3VzIGFu ZCBuZXh0IGhvdmVyIG5hdmlnYXRpb24uDQoJLy8NCgl1cGRhdGVOYXY6IGZ1bmN0 aW9uKCkgew0KDQoJCUVsZW1lbnQuc2hvdygnaG92ZXJOYXYnKTsJCQkJDQoNCgkJ Ly8gaWYgbm90IGZpcnN0IGltYWdlIGluIHNldCwgZGlzcGxheSBwcmV2IGltYWdl IGJ1dHRvbg0KCQlpZihhY3RpdmVJbWFnZSAhPSAwKXsNCgkJCUVsZW1lbnQuc2hv dygncHJldkxpbmsnKTsNCgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmV2 TGluaycpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsNCgkJCQlteUxpZ2h0Ym94LmNo YW5nZUltYWdlKGFjdGl2ZUltYWdlIC0gMSk7IHJldHVybiBmYWxzZTsNCgkJCX0N CgkJfQ0KDQoJCS8vIGlmIG5vdCBsYXN0IGltYWdlIGluIHNldCwgZGlzcGxheSBu ZXh0IGltYWdlIGJ1dHRvbg0KCQlpZihhY3RpdmVJbWFnZSAhPSAoaW1hZ2VBcnJh eS5sZW5ndGggLSAxKSl7DQoJCQlFbGVtZW50LnNob3coJ25leHRMaW5rJyk7DQoJ CQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmV4dExpbmsnKS5vbmNsaWNrID0g ZnVuY3Rpb24oKSB7DQoJCQkJbXlMaWdodGJveC5jaGFuZ2VJbWFnZShhY3RpdmVJ bWFnZSArIDEpOyByZXR1cm4gZmFsc2U7DQoJCQl9DQoJCX0NCgkJDQoJCXRoaXMu ZW5hYmxlS2V5Ym9hcmROYXYoKTsNCgl9LA0KDQoJLy8NCgkvLwllbmFibGVLZXli b2FyZE5hdigpDQoJLy8NCgllbmFibGVLZXlib2FyZE5hdjogZnVuY3Rpb24oKSB7 DQoJCWRvY3VtZW50Lm9ua2V5ZG93biA9IHRoaXMua2V5Ym9hcmRBY3Rpb247IA0K CX0sDQoNCgkvLw0KCS8vCWRpc2FibGVLZXlib2FyZE5hdigpDQoJLy8NCglkaXNh YmxlS2V5Ym9hcmROYXY6IGZ1bmN0aW9uKCkgew0KCQlkb2N1bWVudC5vbmtleWRv d24gPSAnJzsNCgl9LA0KDQoJLy8NCgkvLwlrZXlib2FyZEFjdGlvbigpDQoJLy8N CglrZXlib2FyZEFjdGlvbjogZnVuY3Rpb24oZSkgew0KCQlpZiAoZSA9PSBudWxs KSB7IC8vIGllDQoJCQlrZXljb2RlID0gZXZlbnQua2V5Q29kZTsNCgkJfSBlbHNl IHsgLy8gbW96aWxsYQ0KCQkJa2V5Y29kZSA9IGUud2hpY2g7DQoJCX0NCg0KCQlr ZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGtleWNvZGUpLnRvTG93ZXJDYXNlKCk7 DQoJCQ0KCQlpZigoa2V5ID09ICd4JykgfHwgKGtleSA9PSAnbycpIHx8IChrZXkg PT0gJ2MnKSl7CS8vIGNsb3NlIGxpZ2h0Ym94DQoJCQlteUxpZ2h0Ym94LmVuZCgp Ow0KCQl9IGVsc2UgaWYoa2V5ID09ICdwJyl7CS8vIGRpc3BsYXkgcHJldmlvdXMg aW1hZ2UNCgkJCWlmKGFjdGl2ZUltYWdlICE9IDApew0KCQkJCW15TGlnaHRib3gu ZGlzYWJsZUtleWJvYXJkTmF2KCk7DQoJCQkJbXlMaWdodGJveC5jaGFuZ2VJbWFn ZShhY3RpdmVJbWFnZSAtIDEpOw0KCQkJfQ0KCQl9IGVsc2UgaWYoa2V5ID09ICdu Jyl7CS8vIGRpc3BsYXkgbmV4dCBpbWFnZQ0KCQkJaWYoYWN0aXZlSW1hZ2UgIT0g KGltYWdlQXJyYXkubGVuZ3RoIC0gMSkpew0KCQkJCW15TGlnaHRib3guZGlzYWJs ZUtleWJvYXJkTmF2KCk7DQoJCQkJbXlMaWdodGJveC5jaGFuZ2VJbWFnZShhY3Rp dmVJbWFnZSArIDEpOw0KCQkJfQ0KCQl9DQoNCg0KCX0sDQoNCgkvLw0KCS8vCXBy ZWxvYWROZWlnaGJvckltYWdlcygpDQoJLy8JUHJlbG9hZCBwcmV2aW91cyBhbmQg bmV4dCBpbWFnZXMuDQoJLy8NCglwcmVsb2FkTmVpZ2hib3JJbWFnZXM6IGZ1bmN0 aW9uKCl7DQoNCgkJaWYoKGltYWdlQXJyYXkubGVuZ3RoIC0gMSkgPiBhY3RpdmVJ bWFnZSl7DQoJCQlwcmVsb2FkTmV4dEltYWdlID0gbmV3IEltYWdlKCk7DQoJCQlw cmVsb2FkTmV4dEltYWdlLnNyYyA9IGltYWdlQXJyYXlbYWN0aXZlSW1hZ2UgKyAx XVswXTsNCgkJfQ0KCQlpZihhY3RpdmVJbWFnZSA+IDApew0KCQkJcHJlbG9hZFBy ZXZJbWFnZSA9IG5ldyBJbWFnZSgpOw0KCQkJcHJlbG9hZFByZXZJbWFnZS5zcmMg PSBpbWFnZUFycmF5W2FjdGl2ZUltYWdlIC0gMV1bMF07DQoJCX0NCgkNCgl9LA0K DQoJLy8NCgkvLwllbmQoKQ0KCS8vDQoJZW5kOiBmdW5jdGlvbigpIHsNCgkJdGhp cy5kaXNhYmxlS2V5Ym9hcmROYXYoKTsNCgkJRWxlbWVudC5oaWRlKCdsaWdodGJv eCcpOw0KCQluZXcgRWZmZWN0LkZhZGUoJ292ZXJsYXknLCB7IGR1cmF0aW9uOiAw LjJ9KTsNCgkJc2hvd1NlbGVjdEJveGVzKCk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQovLw0KLy8gZ2V0UGFnZVNj cm9sbCgpDQovLyBSZXR1cm5zIGFycmF5IHdpdGggeCx5IHBhZ2Ugc2Nyb2xsIHZh bHVlcy4NCi8vIENvcmUgY29kZSBmcm9tIC0gcXVpcmtzbW9kZS5vcmcNCi8vDQpm dW5jdGlvbiBnZXRQYWdlU2Nyb2xsKCl7DQoNCgl2YXIgeVNjcm9sbDsNCg0KCWlm IChzZWxmLnBhZ2VZT2Zmc2V0KSB7DQoJCXlTY3JvbGwgPSBzZWxmLnBhZ2VZT2Zm c2V0Ow0KCX0gZWxzZSBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRv Y3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApewkgLy8gRXhwbG9yZXIg NiBTdHJpY3QNCgkJeVNjcm9sbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5z Y3JvbGxUb3A7DQoJfSBlbHNlIGlmIChkb2N1bWVudC5ib2R5KSB7Ly8gYWxsIG90 aGVyIEV4cGxvcmVycw0KCQl5U2Nyb2xsID0gZG9jdW1lbnQuYm9keS5zY3JvbGxU b3A7DQoJfQ0KDQoJYXJyYXlQYWdlU2Nyb2xsID0gbmV3IEFycmF5KCcnLHlTY3Jv bGwpIA0KCXJldHVybiBhcnJheVBhZ2VTY3JvbGw7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCi8vDQovLyBnZXRQYWdlU2l6 ZSgpDQovLyBSZXR1cm5zIGFycmF5IHdpdGggcGFnZSB3aWR0aCwgaGVpZ2h0IGFu ZCB3aW5kb3cgd2lkdGgsIGhlaWdodA0KLy8gQ29yZSBjb2RlIGZyb20gLSBxdWly a3Ntb2RlLm9yZw0KLy8gRWRpdCBmb3IgRmlyZWZveCBieSBwSGFleg0KLy8NCmZ1 bmN0aW9uIGdldFBhZ2VTaXplKCl7DQoJDQoJdmFyIHhTY3JvbGwsIHlTY3JvbGw7 DQoJDQoJaWYgKHdpbmRvdy5pbm5lckhlaWdodCAmJiB3aW5kb3cuc2Nyb2xsTWF4 WSkgewkNCgkJeFNjcm9sbCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg7DQoJ CXlTY3JvbGwgPSB3aW5kb3cuaW5uZXJIZWlnaHQgKyB3aW5kb3cuc2Nyb2xsTWF4 WTsNCgl9IGVsc2UgaWYgKGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0ID4gZG9j dW1lbnQuYm9keS5vZmZzZXRIZWlnaHQpeyAvLyBhbGwgYnV0IEV4cGxvcmVyIE1h Yw0KCQl4U2Nyb2xsID0gZG9jdW1lbnQuYm9keS5zY3JvbGxXaWR0aDsNCgkJeVNj cm9sbCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0Ow0KCX0gZWxzZSB7IC8v IEV4cGxvcmVyIE1hYy4uLndvdWxkIGFsc28gd29yayBpbiBFeHBsb3JlciA2IFN0 cmljdCwgTW96aWxsYSBhbmQgU2FmYXJpDQoJCXhTY3JvbGwgPSBkb2N1bWVudC5i b2R5Lm9mZnNldFdpZHRoOw0KCQl5U2Nyb2xsID0gZG9jdW1lbnQuYm9keS5vZmZz ZXRIZWlnaHQ7DQoJfQ0KCQ0KCXZhciB3aW5kb3dXaWR0aCwgd2luZG93SGVpZ2h0 Ow0KCWlmIChzZWxmLmlubmVySGVpZ2h0KSB7CS8vIGFsbCBleGNlcHQgRXhwbG9y ZXINCgkJd2luZG93V2lkdGggPSBzZWxmLmlubmVyV2lkdGg7DQoJCXdpbmRvd0hl aWdodCA9IHNlbGYuaW5uZXJIZWlnaHQ7DQoJfSBlbHNlIGlmIChkb2N1bWVudC5k b2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVu dEhlaWdodCkgeyAvLyBFeHBsb3JlciA2IFN0cmljdCBNb2RlDQoJCXdpbmRvd1dp ZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOw0KCQl3 aW5kb3dIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVp Z2h0Ow0KCX0gZWxzZSBpZiAoZG9jdW1lbnQuYm9keSkgeyAvLyBvdGhlciBFeHBs b3JlcnMNCgkJd2luZG93V2lkdGggPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRo Ow0KCQl3aW5kb3dIZWlnaHQgPSBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDsN Cgl9CQ0KCQ0KCS8vIGZvciBzbWFsbCBwYWdlcyB3aXRoIHRvdGFsIGhlaWdodCBs ZXNzIHRoZW4gaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydA0KCWlmKHlTY3JvbGwgPCB3 aW5kb3dIZWlnaHQpew0KCQlwYWdlSGVpZ2h0ID0gd2luZG93SGVpZ2h0Ow0KCX0g ZWxzZSB7IA0KCQlwYWdlSGVpZ2h0ID0geVNjcm9sbDsNCgl9DQoNCgkvLyBmb3Ig c21hbGwgcGFnZXMgd2l0aCB0b3RhbCB3aWR0aCBsZXNzIHRoZW4gd2lkdGggb2Yg dGhlIHZpZXdwb3J0DQoJaWYoeFNjcm9sbCA8IHdpbmRvd1dpZHRoKXsJDQoJCXBh Z2VXaWR0aCA9IHdpbmRvd1dpZHRoOw0KCX0gZWxzZSB7DQoJCXBhZ2VXaWR0aCA9 IHhTY3JvbGw7DQoJfQ0KDQoNCglhcnJheVBhZ2VTaXplID0gbmV3IEFycmF5KHBh Z2VXaWR0aCxwYWdlSGVpZ2h0LHdpbmRvd1dpZHRoLHdpbmRvd0hlaWdodCkgDQoJ cmV0dXJuIGFycmF5UGFnZVNpemU7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQoNCi8vDQovLyBnZXRLZXkoa2V5KQ0KLy8gR2V0 cyBrZXljb2RlLiBJZiAneCcgaXMgcHJlc3NlZCB0aGVuIGl0IGhpZGVzIHRoZSBs aWdodGJveC4NCi8vDQpmdW5jdGlvbiBnZXRLZXkoZSl7DQoJaWYgKGUgPT0gbnVs bCkgeyAvLyBpZQ0KCQlrZXljb2RlID0gZXZlbnQua2V5Q29kZTsNCgl9IGVsc2Ug eyAvLyBtb3ppbGxhDQoJCWtleWNvZGUgPSBlLndoaWNoOw0KCX0NCglrZXkgPSBT dHJpbmcuZnJvbUNoYXJDb2RlKGtleWNvZGUpLnRvTG93ZXJDYXNlKCk7DQoJDQoJ aWYoa2V5ID09ICd4Jyl7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KDQovLw0KLy8gbGlzdGVuS2V5KCkNCi8vDQpmdW5j dGlvbiBsaXN0ZW5LZXkgKCkgewlkb2N1bWVudC5vbmtleXByZXNzID0gZ2V0S2V5 OyB9DQoJDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCg0KZnVuY3Rpb24gc2hvd1NlbGVjdEJveGVzKCl7DQoJ c2VsZWN0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3Qi KTsNCglmb3IgKGkgPSAwOyBpICE9IHNlbGVjdHMubGVuZ3RoOyBpKyspIHsNCgkJ c2VsZWN0c1tpXS5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOw0KCX0NCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQoNCmZ1bmN0aW9uIGhpZGVTZWxlY3RCb3hlcygpew0KCXNlbGVj dHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0Iik7DQoJ Zm9yIChpID0gMDsgaSAhPSBzZWxlY3RzLmxlbmd0aDsgaSsrKSB7DQoJCXNlbGVj dHNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOw0KCX0NCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQoNCi8vDQovLyBwYXVzZShudW1iZXJNaWxsaXMpDQovLyBQYXVzZXMgY29k ZSBleGVjdXRpb24gZm9yIHNwZWNpZmllZCB0aW1lLiBVc2VzIGJ1c3kgY29kZSwg bm90IGdvb2QuDQovLyBDb2RlIGZyb20gaHR0cDovL3d3dy5mYXF0cy5jb20va25v d2xlZGdlX2Jhc2Uvdmlldy5waHRtbC9haWQvMTYwMg0KLy8NCmZ1bmN0aW9uIHBh dXNlKG51bWJlck1pbGxpcykgew0KCXZhciBub3cgPSBuZXcgRGF0ZSgpOw0KCXZh ciBleGl0VGltZSA9IG5vdy5nZXRUaW1lKCkgKyBudW1iZXJNaWxsaXM7DQoJd2hp bGUgKHRydWUpIHsNCgkJbm93ID0gbmV3IERhdGUoKTsNCgkJaWYgKG5vdy5nZXRU aW1lKCkgPiBleGl0VGltZSkNCgkJCXJldHVybjsNCgl9DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K DQoNCg0KZnVuY3Rpb24gaW5pdExpZ2h0Ym94KCkgeyBteUxpZ2h0Ym94ID0gbmV3 IExpZ2h0Ym94KCk7IH0NCkV2ZW50Lm9ic2VydmUod2luZG93LCAnbG9hZCcsIGlu aXRMaWdodGJveCwgZmFsc2UpOw0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ== ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=popup.js Content-Type: application/javascript; charset=UTF-8; name=popup.js Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/popup.js Content-Transfer-Encoding: Base64 dmFyIHdhc19TYnJQb3BVcF9Jbml0ID0gMDsNCnZhciBTYnJQb3BVcCA9IHsNCglp bml0OiBmdW5jdGlvbihpZCkgeyANCgkJdGhpcy5sYXN0ID0gZmFsc2U7DQoJCXRo aXMudHJpZ2dlciA9IGZhbHNlOw0KDQoJCWlmIChpZCAmJiAoZm9ybSA9IGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKGlkKSkpIHsNCgkJCXRoaXMucyA9IGZvcm0uZ2V0 RWxlbWVudHNCeVRhZ05hbWUoJ3NlbGVjdCcpOw0KCQl9IGVsc2Ugew0KCQkJdGhp cy5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NlbGVjdCcpOw0K CQl9DQogICAgCXRoaXMuc0NvdW50ID0gdGhpcy5zLmxlbmd0aDsNCgkJZm9yICh2 YXIgaT0wOyBpPHRoaXMuc0NvdW50OyBpKyspIHsNCgkJICBpZiAoIXRoaXMuc1tp XS5tdWx0aXBsZSkgew0KICAJCQlpZiAoIXRoaXMuc1tpXS5pZCkgew0KICAJCQkJ dGhpcy5zW2ldLmlkID0gJ3NlbGVjdF8nK2k7DQogIAkJCX0NCgkJCXRoaXMucnVu KHRoaXMuc1tpXSwgaSk7DQogCQkgIH0NCgkJfQ0KCX0sDQoNCglydW46IGZ1bmN0 aW9uKG9iaiwgY291bnRlcikgew0KCQkvLyBidWlsZGluZyBmYXV4IHNlbGVjdCBz dHJ1Y3R1cmUNCgkJdmFyIGZhdXhTZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50 KCdkbCcpOw0KCQlmYXV4U2VsLmNsYXNzTmFtZSA9IG9iai5jbGFzc05hbWUgPyBv YmouY2xhc3NOYW1lICsgJyBzYnJXcmFwJyA6ICdzYnJXcmFwJzsNCgkJb2JqLmNs YXNzTmFtZSA9ICdzZWxSZXBsYWNlZCc7DQoNCgkJZmF1eFNlbC5vbmNsaWNrID0g ZnVuY3Rpb24oKSB7CQ0KCQkJdmFyIHNlbGVjdEVsZW1lbnQgPSB0aGlzLm5leHRT aWJsaW5nOw0KCQkJaWYgKHRoaXMuY2hpbGROb2Rlc1sxXS5jbGFzc05hbWUgPT0g J3Nick9wdHNDb2wnKSB7DQoJCQkJc2VsZWN0RWxlbWVudC5vbmZvY3VzKCk7DQoJ CQkJU2JyUG9wVXAubGFzdC5jbGFzc05hbWUgPSAnc2JyT3B0c0NvbCc7DQoJCQkJ U2JyUG9wVXAubGFzdCA9IHRoaXMuY2hpbGROb2Rlc1sxXTsNCgkJCQlTYnJQb3BV cC50cmlnZ2VyID0gZmFsc2U7DQoJCQkJZG9jdW1lbnQub25jbGljayA9IGZ1bmN0 aW9uKCkgeyBpZiAoU2JyUG9wVXAudHJpZ2dlcikgU2JyUG9wVXAubGFzdC5jbGFz c05hbWUgPSAnc2JyT3B0c0NvbCc7IFNiclBvcFVwLnRyaWdnZXIgPSB0cnVlOyB9 DQoJCQkJdGhpcy5jaGlsZE5vZGVzWzFdLmNsYXNzTmFtZSA9ICdzYnJPcHRzRXhw JzsNCgkJCX0gZWxzZSB7DQoJCQkJU2JyUG9wVXAubGFzdE9iaklkID0gZmFsc2U7 DQoJCQkJZG9jdW1lbnQub25jbGljayA9IGZ1bmN0aW9uKCkgewl9DQoJCQkJdGhp cy5jaGlsZE5vZGVzWzFdLmNsYXNzTmFtZSA9ICdzYnJPcHRzQ29sJzsNCgkJCX0N CgkJCWlmICh0aGlzLmNoaWxkTm9kZXNbMF0uY2xhc3NOYW1lID09ICcnKSB7DQoJ CQkJdGhpcy5uZXh0U2libGluZy5mb2N1cygpOw0KCQkJfQ0KCQl9DQoNCgkJdmFy IGN1ck9wdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2R0Jyk7DQoJCWN1ck9w dC5jbGFzc05hbWUgPSAnJzsNCgkJZmF1eFNlbC5hcHBlbmRDaGlsZChjdXJPcHQp Ow0KCQl2YXIgb3B0c1dyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkZCcp Ow0KCQlvcHRzV3JhcC5jbGFzc05hbWUgPSAnc2JyT3B0c0NvbCc7DQoJCWZhdXhT ZWwuYXBwZW5kQ2hpbGQob3B0c1dyYXApOw0KCQl2YXIgb3B0c0xpc3QgPSBkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpOw0KCQlvcHRzV3JhcC5hcHBlbmRDaGls ZChvcHRzTGlzdCk7DQoJCW9wdHNMaXN0LnN0eWxlLnpJbmRleCA9IGZhdXhTZWwu c3R5bGUuekluZGV4ID0gMTAwMC1jb3VudGVyOw0KDQoJCXZhciBvcHRzID0gb2Jq Lm9wdGlvbnM7DQoJCXZhciBzZWxlY3RlZE9wdCA9ICghb2JqLnNlbGVjdGVkSW5k ZXgpID8gMCA6IG9iai5zZWxlY3RlZEluZGV4Ow0KCQlmb3IgKHZhciBpPTA7IGk8 b3B0cy5sZW5ndGg7IGkrKykgew0KCQkJdmFyIGxpID0gZG9jdW1lbnQuY3JlYXRl RWxlbWVudCgnbGknKTsNCgkJCXZhciB0eHQgPSBvcHRzW2ldLnRleHQgPyBkb2N1 bWVudC5jcmVhdGVUZXh0Tm9kZShvcHRzW2ldLnRleHQpIDogZG9jdW1lbnQuY3Jl YXRlVGV4dE5vZGUoJ2JsYW5rIG9wdGlvbicpOw0KCQkJbGkuYXBwZW5kQ2hpbGQo dHh0KTsNCgkJCWxpLnRpdGxlID0gb3B0c1tpXS50aXRsZTsNCgkJCWxpLnNlbElu ZGV4ID0gaTsNCgkJCWxpLnNlbGVjdElEID0gb2JqLmlkOw0KCQkJbGkub25jbGlj ayA9IGZ1bmN0aW9uKCkgew0KCQkJCVNiclBvcFVwLnNlbGVjdE1lKHRoaXMpOw0K CQkJfQ0KCQkJaWYgKGkgPT0gc2VsZWN0ZWRPcHQpIHsNCgkJCQlsaS5jbGFzc05h bWUgPSAnc2JyU2VsZWN0ZWQnOw0KCQkJCWN1ck9wdC5hcHBlbmRDaGlsZCh0eHQu Y2xvbmVOb2RlKGZhbHNlKSk7DQoJCQl9DQoJCQlpZiAod2luZG93LmF0dGFjaEV2 ZW50KSB7DQoJCQkJbGkub25tb3VzZW92ZXIgPSBmdW5jdGlvbigpIHsNCgkJCQkJ dGhpcy5jbGFzc05hbWUgKz0gJyBob3Zlcic7DQoJCQkJfQ0KCQkJCWxpLm9ubW91 c2VvdXQgPSBmdW5jdGlvbigpIHsNCgkJCQkJdGhpcy5jbGFzc05hbWUgPSB0aGlz LmNsYXNzTmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAoIiBob3ZlclxcYiIpLCAnJyk7 DQoJCQkJfQ0KCQkJfQ0KCQkJb3B0c0xpc3QuYXBwZW5kQ2hpbGQobGkpOw0KCQl9 DQoJCW9iai5vbGRvbmZvY3VzID0gb2JqLm9uZm9jdXM7DQoJCW9iai5vbmZvY3Vz ID0gZnVuY3Rpb24oKSB7DQoJCQlpZiAodGhpcy5vbGRvbmZvY3VzKSB0aGlzLm9s ZG9uZm9jdXMoKTsNCgkJCXRoaXMucHJldmlvdXNTaWJsaW5nLmNoaWxkTm9kZXNb MF0uY2xhc3NOYW1lID0gJ3NickZvY3VzZWQnOw0KCQl9DQoJCW9iai5vbGRvbmJs dXIgPSBvYmoub25ibHVyOw0KCQlvYmoub25ibHVyID0gZnVuY3Rpb24oKSB7DQoJ CQlpZiAodGhpcy5vbGRvbmJsdXIpIHRoaXMub2xkb25ibHVyKCk7DQoJCQl0aGlz LnByZXZpb3VzU2libGluZy5jaGlsZE5vZGVzWzBdLmNsYXNzTmFtZSA9ICcnOw0K CQl9DQoJCW9iai5vbGRvbmNoYW5nZSA9IG9iai5vbmNoYW5nZTsNCgkJb2JqLm9u Y2hhbmdlID0gZnVuY3Rpb24oKSB7DQoJCQlpZihvYmoucHJldmlvdXMgPT0gdW5k ZWZpbmVkKSB7DQoJCQkJb2JqLnByZXZpb3VzID0gb2JqLnZhbHVlOw0KCQkJfSBl bHNlIHsNCgkJCQlpZihvYmoucHJldmlvdXMgPT0gb2JqLnZhbHVlKSB7DQoJCQkJ CXJldHVybjsNCgkJCQl9IGVsc2Ugew0KCQkJCQlvYmoucHJldmlvdXMgPSBvYmou dmFsdWU7DQoJCQkJfQ0KCQkJfQ0KCQkJLy9hbGVydCgiQ2hhbmdlIik7DQoJCQlp ZiAodGhpcy5vbGRvbmNoYW5nZSkgdGhpcy5vbGRvbmNoYW5nZSgpOw0KCQkJdmFy IGlkeCA9IHRoaXMuc2VsZWN0ZWRJbmRleDsNCgkJCXZhciB1bCA9IHRoaXMucHJl dmlvdXNTaWJsaW5nLmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXTsNCgkJCVNi clBvcFVwLnNlbGVjdE1lKHVsLmNoaWxkTm9kZXNbaWR4XSwxKTsNCgkJfQ0KCQlv Ymoub25rZXlwcmVzcyA9IG9iai5vbmNoYW5nZTsNCg0KCQlvYmoucGFyZW50Tm9k ZS5pbnNlcnRCZWZvcmUoZmF1eFNlbCxvYmopOw0KCX0sDQoNCglzZWxlY3RNZTog ZnVuY3Rpb24obGlPYmopIHsNCgkJdmFyIHNlbGVjdEVsZW1lbnQgPSBsaU9iai5w YXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5uZXh0U2libGluZzsNCgkJ dmFyIGxpcyA9IGxpT2JqLnBhcmVudE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUo J2xpJyk7DQoJCWZvciAodmFyIGk9MDsgaTxsaXMubGVuZ3RoOyBpKyspIHsNCgkJ CWlmIChsaXNbaV0gIT0gbGlPYmopIHsNCgkJCQlsaXNbaV0uY2xhc3NOYW1lID0g Jyc7DQoJCQkJbGlzW2ldLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsNCgkJCQkJU2Jy UG9wVXAuc2VsZWN0TWUodGhpcyk7DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQl0 aGlzLnNldFZhbChsaU9iai5zZWxlY3RJRCwgbGlPYmouc2VsSW5kZXgpOw0KCQkJ CWxpT2JqLmNsYXNzTmFtZSA9ICdzYnJTZWxlY3RlZCc7DQoJCQkJdmFyIGN1ck9w dCA9IGxpT2JqLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxk Tm9kZXNbMF07DQoJCQkJY3VyT3B0LnJlbW92ZUNoaWxkKGN1ck9wdC5jaGlsZE5v ZGVzWzBdKTsNCgkJCQljdXJPcHQuYXBwZW5kQ2hpbGQobGlPYmouY2hpbGROb2Rl c1swXS5jbG9uZU5vZGUoZmFsc2UpKTsNCgkJCQlpZihhcmd1bWVudHNbMV0gIT0g MSl7DQoJCQkJCXNlbGVjdEVsZW1lbnQub25jaGFuZ2UoKTsNCgkJCQl9DQoJCQl9 DQoJCX0NCgl9LA0KDQoJc2V0VmFsOiBmdW5jdGlvbihvYmpJRCwgdmFsKSB7DQoJ CXZhciBvYmogPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvYmpJRCk7DQoJCW9i ai5zZWxlY3RlZEluZGV4ID0gdmFsOw0KCX0NCn0NCg0KDQp2YXIgYnJvd3Nlck5h bWU9bmF2aWdhdG9yLmFwcE5hbWU7ICANCg0KaWYgKGJyb3dzZXJOYW1lPT0iTWlj cm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIikgDQp7IA0KICB2YXIgYWd0PW5hdmln YXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsNCiAgdmFyIGllUG9zICA9IGFn dC5pbmRleE9mKCdtc2llJyk7DQogIHZhciBicm93c2VyVmVyID0gcGFyc2VGbG9h dChhZ3Quc3Vic3RyaW5nKGllUG9zKzUsYWd0LmluZGV4T2YoJzsnLGllUG9zKSkp Ow0KDQogIGlmKGJyb3dzZXJWZXIgPCA3KSAgIHdpbmRvdy5pc0lFNj10cnVlOw0K fQ0KZWxzZSANCiAgd2luZG93LmlzSUU2PWZhbHNlOyANCg0KDQoNCmZ1bmN0aW9u IGdldFBhZ2VTaXplKCkgew0KCQ0KIHZhciB4U2Nyb2xsLCB5U2Nyb2xsOw0KDQpp ZiAod2luZG93LmlubmVySGVpZ2h0ICYmIHdpbmRvdy5zY3JvbGxNYXhZKSB7CQ0K CXhTY3JvbGwgPSB3aW5kb3cuaW5uZXJXaWR0aCArIHdpbmRvdy5zY3JvbGxNYXhY Ow0KCXlTY3JvbGwgPSB3aW5kb3cuaW5uZXJIZWlnaHQgKyB3aW5kb3cuc2Nyb2xs TWF4WTsNCn0gZWxzZSBpZiAoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQgPiBk b2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCl7IC8vIGFsbCBidXQgRXhwbG9yZXIg TWFjDQoJeFNjcm9sbCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg7DQoJeVNj cm9sbCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0Ow0KfSBlbHNlIHsgLy8g RXhwbG9yZXIgTWFjLi4ud291bGQgYWxzbyB3b3JrIGluIEV4cGxvcmVyIDYgU3Ry aWN0LCBNb3ppbGxhIGFuZCBTYWZhcmkNCgl4U2Nyb2xsID0gZG9jdW1lbnQuYm9k eS5vZmZzZXRXaWR0aDsNCgl5U2Nyb2xsID0gZG9jdW1lbnQuYm9keS5vZmZzZXRI ZWlnaHQ7DQp9DQoNCnZhciB3aW5kb3dXaWR0aCwgd2luZG93SGVpZ2h0Ow0KDQpp ZiAoc2VsZi5pbm5lckhlaWdodCkgewkvLyBhbGwgZXhjZXB0IEV4cGxvcmVyDQoJ aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKXsNCgkJd2lu ZG93V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7 IA0KCX0gZWxzZSB7DQoJCXdpbmRvd1dpZHRoID0gc2VsZi5pbm5lcldpZHRoOw0K CX0NCgl3aW5kb3dIZWlnaHQgPSBzZWxmLmlubmVySGVpZ2h0Ow0KfSBlbHNlIGlm IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRF bGVtZW50LmNsaWVudEhlaWdodCkgeyAvLyBFeHBsb3JlciA2IFN0cmljdCBNb2Rl DQoJd2luZG93V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50 V2lkdGg7DQoJd2luZG93SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50 LmNsaWVudEhlaWdodDsNCn0gZWxzZSBpZiAoZG9jdW1lbnQuYm9keSkgeyAvLyBv dGhlciBFeHBsb3JlcnMNCgl3aW5kb3dXaWR0aCA9IGRvY3VtZW50LmJvZHkuY2xp ZW50V2lkdGg7DQoJd2luZG93SGVpZ2h0ID0gZG9jdW1lbnQuYm9keS5jbGllbnRI ZWlnaHQ7DQp9CQ0KDQovLyBmb3Igc21hbGwgcGFnZXMgd2l0aCB0b3RhbCBoZWln aHQgbGVzcyB0aGVuIGhlaWdodCBvZiB0aGUgdmlld3BvcnQNCmlmKHlTY3JvbGwg PCB3aW5kb3dIZWlnaHQpew0KCXBhZ2VIZWlnaHQgPSB3aW5kb3dIZWlnaHQ7DQp9 IGVsc2UgeyANCglwYWdlSGVpZ2h0ID0geVNjcm9sbDsNCn0NCg0KLy8gZm9yIHNt YWxsIHBhZ2VzIHdpdGggdG90YWwgd2lkdGggbGVzcyB0aGVuIHdpZHRoIG9mIHRo ZSB2aWV3cG9ydA0KaWYoeFNjcm9sbCA8IHdpbmRvd1dpZHRoKXsJDQoJcGFnZVdp ZHRoID0geFNjcm9sbDsJCQ0KfSBlbHNlIHsNCglwYWdlV2lkdGggPSB3aW5kb3dX aWR0aDsNCn0NCg0KcmV0dXJuIFtwYWdlV2lkdGgscGFnZUhlaWdodF07DQp9DQoN CmZ1bmN0aW9uIGdldFNjcm9sbFhZKCkgew0KICB2YXIgc2NyT2ZYID0gMCwgc2Ny T2ZZID0gMDsNCiAgaWYoIHR5cGVvZiggd2luZG93LnBhZ2VZT2Zmc2V0ICkgPT0g J251bWJlcicgKSB7DQogICAgLy9OZXRzY2FwZSBjb21wbGlhbnQNCiAgICBzY3JP ZlkgPSB3aW5kb3cucGFnZVlPZmZzZXQ7DQogICAgc2NyT2ZYID0gd2luZG93LnBh Z2VYT2Zmc2V0Ow0KICB9IGVsc2UgaWYoIGRvY3VtZW50LmJvZHkgJiYgKCBkb2N1 bWVudC5ib2R5LnNjcm9sbExlZnQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3Ag KSApIHsNCiAgICAvL0RPTSBjb21wbGlhbnQNCiAgICBzY3JPZlkgPSBkb2N1bWVu dC5ib2R5LnNjcm9sbFRvcDsNCiAgICBzY3JPZlggPSBkb2N1bWVudC5ib2R5LnNj cm9sbExlZnQ7DQogIH0gZWxzZSBpZiggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50 ICYmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgZG9j dW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCApICkgew0KICAgIC8vSUU2 IHN0YW5kYXJkcyBjb21wbGlhbnQgbW9kZQ0KICAgIHNjck9mWSA9IGRvY3VtZW50 LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7DQogICAgc2NyT2ZYID0gZG9jdW1l bnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7DQogIH0NCiAgcmV0dXJuIFsg c2NyT2ZYLCBzY3JPZlkgXTsNCn0NCg0KZnVuY3Rpb24gZ2V0V2luZG93U2l6ZSgp DQp7DQoJdmFyIHcgPSAwOw0KCXZhciBoID0gMDsNCg0KCS8vSUUNCglpZighd2lu ZG93LmlubmVyV2lkdGgpDQoJew0KCQkvL3N0cmljdCBtb2RlDQoJCWlmKCEoZG9j dW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoID09IDApKQ0KCQl7DQoJ CQl3ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOw0KCQkJ aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7DQoJCX0N CgkJLy9xdWlya3MgbW9kZQ0KCQllbHNlDQoJCXsNCgkJCXcgPSBkb2N1bWVudC5i b2R5LmNsaWVudFdpZHRoOw0KCQkJaCA9IGRvY3VtZW50LmJvZHkuY2xpZW50SGVp Z2h0Ow0KCQl9DQoJfQ0KCS8vdzNjDQoJZWxzZQ0KCXsNCgkJdyA9IHdpbmRvdy5p bm5lcldpZHRoOw0KCQloID0gd2luZG93LmlubmVySGVpZ2h0Ow0KCX0NCglyZXR1 cm4gW3csaF07DQp9DQoNCg0KZnVuY3Rpb24gc2hvd1NpbXBsZShpZCkNCnsNCgl2 YXIgYXJyYXlQYWdlU2l6ZSA9IHRoaXMuZ2V0UGFnZVNpemUoKTsNCgkkKCdwb3B1 cF9vdmVybGF5Jykuc2V0U3R5bGUoeyB3aWR0aDogYXJyYXlQYWdlU2l6ZVswXSAr ICdweCcsIGhlaWdodDogYXJyYXlQYWdlU2l6ZVsxXSArICdweCcgfSk7DQoJDQoJ JCgncG9wdXBfb3ZlcmxheScpLnNob3coKTsNCgkkKGlkKS5zaG93KCk7DQoJDQoJ aWYoZ2V0U2Nyb2xsWFkoKVsxXSA+IDApDQoJew0KCSB2YXIgbXlIZWlnaHQgPSAw Ow0KCSAgaWYoIHR5cGVvZiggd2luZG93LmlubmVyV2lkdGggKSA9PSAnbnVtYmVy JyApIHsNCgkJLy9Ob24tSUUNCgkJbXlIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWln aHQ7DQoJICB9IGVsc2UgaWYoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAo IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVu dC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICkgKSB7DQoJCS8vSUUgNisg aW4gJ3N0YW5kYXJkcyBjb21wbGlhbnQgbW9kZScNCgkJbXlIZWlnaHQgPSBkb2N1 bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0Ow0KCSAgfSBlbHNlIGlm KCBkb2N1bWVudC5ib2R5ICYmICggZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCB8 fCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCApICkgew0KCQkvL0lFIDQgY29t cGF0aWJsZQ0KCQlteUhlaWdodCA9IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0 Ow0KCSAgfQ0KCQkkKGlkKS5zdHlsZS50b3AgPSBnZXRTY3JvbGxYWSgpWzFdICsg bXlIZWlnaHQvMiArICdweCc7DQoJCSQoaWQpLnN0eWxlLm1hcmdpbkxlZnQgPSAn LScrJChpZCsnX2hvbGRlcicpLmdldFdpZHRoKCkvMiArICdweCc7DQoJCSQoaWQp LnN0eWxlLm1hcmdpblRvcCA9ICctJyskKGlkKydfaG9sZGVyJykuZ2V0SGVpZ2h0 KCkvMiArICdweCc7DQoJfQ0KCWVsc2UNCgl7DQoJCSQoaWQpLnN0eWxlLnRvcCA9 ICI1MCUiOw0KCQkkKGlkKS5zdHlsZS5tYXJnaW5MZWZ0ID0gJy0nKyQoaWQrJ19o b2xkZXInKS5nZXRXaWR0aCgpLzIgKyAncHgnOw0KCQkkKGlkKS5zdHlsZS5tYXJn aW5Ub3AgPSAnLScrJChpZCsnX2hvbGRlcicpLmdldEhlaWdodCgpLzIgKyAncHgn Ow0KCX0NCn0NCg0KZnVuY3Rpb24gbW92ZU5vZGVDb250ZW50KGZyb20sIHRvKSB7 DQoJJEEoJChmcm9tKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKGVsdCkgew0K CQlpZiAoZWx0Lm5vZGVUeXBlICE9IDMpIHsNCgkJCSQoZnJvbSkucmVtb3ZlQ2hp bGQoZWx0KTsgJCh0bykuYXBwZW5kQ2hpbGQoZWx0KTsNCgkJfQ0KCX0pDQp9DQoN CmZ1bmN0aW9uIHBvcHVwU2hvdyhlbGVtSWQsaHJlZixjb3N0LGlzS2V5d29yZHMs IHllc0lkKQ0KewkJDQoJaWYoaHJlZikNCgl7DQoJCWlmKHR5cGVvZih5ZXNJZCkg PT0gJ3VuZGVmaW5lZCcpew0KCQkJJCgneWVzJykuaHJlZiA9IGhyZWY7DQoJCQkk KCd5ZXNfdGV0eCcpLmhyZWYgPSBocmVmOw0KCQl9DQoJCWVsc2UNCgkJJCh5ZXNJ ZCkuaHJlZiA9IGhyZWY7DQoJfQ0KCWlmKGNvc3QpICQoJ3dhcm5pbmdfY29zdCcp LnVwZGF0ZShjb3N0KTsNCglpZihjb3N0KSAkKCd3YXJuaW5nX2Nvc3RfZicpLnVw ZGF0ZShjb3N0KTsNCgkNCgl2YXIgYXJyYXlQYWdlU2l6ZSA9IHRoaXMuZ2V0UGFn ZVNpemUoKTsNCgkkKCdwb3B1cF9vdmVybGF5Jykuc2V0U3R5bGUoeyB3aWR0aDog YXJyYXlQYWdlU2l6ZVswXSArICdweCcsIGhlaWdodDogYXJyYXlQYWdlU2l6ZVsx XSArICdweCcgfSk7DQoJDQoJaWYoJChlbGVtSWQrJ19ob2xkZXInKSAmJiAkKGVs ZW1JZCsnX2hvbGRlcicpLmlubmVySFRNTCAhPSAiIikNCgl7DQoJCSQoZWxlbUlk KS51cGRhdGUoJChlbGVtSWQrJ19ob2xkZXInKS5pbm5lckhUTUwpOw0KCQkkKCdw b3B1cF93aW5kb3cnKS51cGRhdGUoIiIpOw0KCX0NCgkNCgkkKCdwb3B1cF93aW5k b3cnKS5hcHBlbmRDaGlsZChCdWlsZGVyLm5vZGUoJ2Rpdicse2lkOmVsZW1JZCsn X2hvbGRlcid9KSk7DQoJDQoJLy8kKGVsZW1JZCsnX2hvbGRlcicpLnVwZGF0ZSgk KGVsZW1JZCkuaW5uZXJIVE1MKTsNCgkvLyQoZWxlbUlkKS51cGRhdGUoIiIpOw0K CW1vdmVOb2RlQ29udGVudCgkKGVsZW1JZCksICQoZWxlbUlkKydfaG9sZGVyJykp Ow0KCQ0KCWlmKHdpbmRvdy5pc0lFNikkKCdwb3B1cF93aW5kb3cnKS5zdHlsZS50 b3AgPSBnZXRTY3JvbGxYWSgpWzFdICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50 LmNsaWVudEhlaWdodC8yICsgInB4IjsNCgllbHNlICQoJ3BvcHVwX3dpbmRvdycp LnN0eWxlLnRvcCA9ICI1MCUiOw0KCSQoJ3BvcHVwX3dpbmRvdycpLnN0eWxlLm1h cmdpbkxlZnQgPSAnLScrJCgncG9wdXBfd2luZG93JykuZ2V0V2lkdGgoKS8yICsg J3B4JzsNCgkkKCdwb3B1cF93aW5kb3cnKS5zdHlsZS5tYXJnaW5Ub3AgPSAnLScr JCgncG9wdXBfd2luZG93JykuZ2V0SGVpZ2h0KCkvMiArICdweCc7DQoJJCgncG9w dXBfd2luZG93Jykuc3R5bGUucG9zaXRpb249ICdmaXhlZCc7DQoJDQoJaWYoJCgn cG9wdXBfd2luZG93JykuZ2V0SGVpZ2h0KCkgPiBnZXRXaW5kb3dTaXplKClbMV0p DQoJew0KCQkkKCdwb3B1cF93aW5kb3cnKS5zdHlsZS50b3AgPSBnZXRTY3JvbGxY WSgpWzFdKyJweCI7DQoJCSQoJ3BvcHVwX3dpbmRvdycpLnN0eWxlLm1hcmdpblRv cCA9ICcwcHgnOw0KCQkkKCdwb3B1cF93aW5kb3cnKS5zdHlsZS5wb3NpdGlvbj0g J2Fic29sdXRlJzsNCgl9DQoJDQoJJCgncG9wdXBfb3ZlcmxheScpLnNob3coKTsN CgkkKCdwb3B1cF93aW5kb3cnKS5zaG93KCk7DQoJDQoJJCgncG9wdXBfd2luZG93 Jykuc3R5bGUuekluZGV4ID0gMTAwMDE7DQoJDQoJaWYod2luZG93LmlzSUU2KQ0K CXsNCgkJJCQoJ3NlbGVjdCcpLmVhY2goZnVuY3Rpb24oc2VsKXsNCgkJCWlmKHR5 cGVvZihzZWwudXAoJy5wb3B1cF93bmQnKSkgPT0gJ3VuZGVmaW5lZCcpIHNlbC5z dHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7DQoJCX0pOw0KCQkvLyBhc3NpZ24g b3RoZXIgcG9zaXRpb24gZm9yIElFNiBvbmx5DQoJCSQoJ3BvcHVwX3dpbmRvdycp LnN0eWxlLnBvc2l0aW9uPSAnYWJzb2x1dGUnOwkNCgkJJCgncG9wdXBfd2luZG93 Jykuc3R5bGUubWFyZ2luTGVmdCA9ICctJyskKCdwb3B1cF93aW5kb3cnKS5nZXRX aWR0aCgpLzIgKyAncHgnOw0KCQkkKCdwb3B1cF93aW5kb3cnKS5zdHlsZS5tYXJn aW5Ub3AgPSAnLScrJCgncG9wdXBfd2luZG93JykuZ2V0SGVpZ2h0KCkvMiArICdw eCc7DQoJfQ0KCQ0KCS8qaWYgKHdhc19TYnJQb3BVcF9Jbml0ID09IDApIHsNCgkJ U2JyUG9wVXAuaW5pdCgnanNfcmVwb3J0Rm9ybScpOw0KCQl3YXNfU2JyUG9wVXBf SW5pdCA9IDE7DQoJfSBlbHNlIHsNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo J2pzX3JlcG9ydEZvcm0nKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGwnKVswXS5y ZW1vdmUoKTsNCgkJU2JyUG9wVXAuaW5pdCgnanNfcmVwb3J0Rm9ybScpOw0KCX0q Lw0KfQ0KDQoNCmZ1bmN0aW9uIHBvcHVwQ2xvc2VTaW1wbGUoZWxlbUlkKQ0Kew0K CSQoJ3BvcHVwX292ZXJsYXknKS5oaWRlKCk7DQoJJChlbGVtSWQpLmhpZGUoKTsJ DQp9DQoNCg0KZnVuY3Rpb24gcG9wdXBDbG9zZShlbGVtSWQpDQp7CQ0KaWYoJChl bGVtSWQrJ19ob2xkZXInKSAmJiAkKGVsZW1JZCsnX2hvbGRlcicpLmlubmVySFRN TCAhPSAiIikNCnsNCgkvLyQoZWxlbUlkKS51cGRhdGUoJChlbGVtSWQrJ19ob2xk ZXInKS5pbm5lckhUTUwpOw0KCW1vdmVOb2RlQ29udGVudCgkKGVsZW1JZCsnX2hv bGRlcicpLCAkKGVsZW1JZCkpOw0KCSQoJ3BvcHVwX3dpbmRvdycpLnVwZGF0ZSgi Iik7DQp9DQoNCiQoJ3BvcHVwX292ZXJsYXknKS5oaWRlKCk7DQokKCdwb3B1cF93 aW5kb3cnKS5oaWRlKCk7DQoNCmlmKHdpbmRvdy5pc0lFNikNCnsNCgkkJCgnc2Vs ZWN0JykuZWFjaChmdW5jdGlvbihzZWwpew0KCSAgIGlmKHR5cGVvZihzZWwudXAo Jy5wb3B1cF93bmQnKSkgPT0gJ3VuZGVmaW5lZCcpIHNlbC5zdHlsZS52aXNpYmls aXR5ID0gJ3Zpc2libGUnOw0KCX0pOw0KfQ0KDQp9DQoNCg0KZnVuY3Rpb24gc2hv d1RhYih0YWJJRCwgb2JqKQ0Kew0KJCQoJyN0YWJfbmF2IGEnKS5lYWNoKGZ1bmN0 aW9uKGl0KXsNCglpdC5jbGFzc05hbWUgPSAnJzsNCn0pOw0KDQokJCgnLnRhYkNv bnQnKS5lYWNoKGZ1bmN0aW9uKGl0KXsNCglpdC5zdHlsZS5kaXNwbGF5ID0gJ25v bmUnOw0KfSk7DQoNCiQob2JqKS5jbGFzc05hbWUgPSAnc2VsJzsNCiQodGFiSUQp LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KfQ0KDQoNCkV2ZW50Lm9ic2VydmUo d2luZG93LCAnbG9hZCcsIGZ1bmN0aW9uICgpIHsNCi8qCQluZXcgSW5zZXJ0aW9u LkJvdHRvbShkb2N1bWVudC5ib2R5LCc8ZGl2IGlkPSJwb3B1cF9vdmVybGF5Ij48 L2Rpdj4nKTsNCm5ldyBJbnNlcnRpb24uQm90dG9tKGRvY3VtZW50LmJvZHksJzxk aXYgaWQ9InBvcHVwX3dpbmRvdyI+PC9kaXY+Jyk7Ki8NCmRvY3VtZW50LmJvZHku YXBwZW5kQ2hpbGQoQnVpbGRlci5ub2RlKCdkaXYnLHtpZDoncG9wdXBfb3Zlcmxh eSd9KSk7DQpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKEJ1aWxkZXIubm9kZSgn ZGl2Jyx7aWQ6J3BvcHVwX3dpbmRvdycsIGNsYXNzTmFtZToncG9wdXBfd25kJ30p KTsNCg0KJCgncG9wdXBfb3ZlcmxheScpLnNldFN0eWxlKHsncG9zaXRpb24nOiAn YWJzb2x1dGUnLCAndG9wJzogJzAnLCAnbGVmdCc6ICcwJywgJ3otaW5kZXgnOiAn MTAwMCcsICd3aWR0aCc6ICcxMDAlJywgJ2hlaWdodCc6ICc1MDBweCcsICdiYWNr Z3JvdW5kJzogJyMwMDAnLCAnZGlzcGxheSc6J25vbmUnLCAnb3BhY2l0eSc6JzAu OCd9KTsNCg0KJCgncG9wdXBfd2luZG93Jykuc2V0U3R5bGUoeydwb3NpdGlvbic6 J2ZpeGVkJywgJ3RvcCc6JzUwJScsICdsZWZ0JzonNTAlJywgJ3otaW5kZXgnOicx MDAwMScsICdkaXNwbGF5Jzonbm9uZSd9KTsNCg0KfSk7 ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=cbir.js Content-Type: application/javascript; charset=UTF-8; name=cbir.js Content-Location: http://cdn-small.content.adultcentro.com/JS/small/cbir.js Content-Transfer-Encoding: Base64 LyoqCiAqIENoZWNrYm94ZXMgSW1hZ2UgUmVwbGFjaW5nCiAqIHYuMC41LjEgKDIw MDYtMTEtMDgpCiAqIGJ5IFplVCwgqSBFbnZpc2lvbmV4dCAod3d3LmVudmlzaW9u ZXh0LmNvbSkKICoKICogVGhpcyBzY3JpcHQgYXV0b21hdGljYWxseSByZXBsYWNl cyBhbGwgY2hlY2tib3hlcyBvbiB0aGUgcGFnZSB3aXRoIGRlZmluZWQgaW1hZ2Vz LgogKiBObyBuZWVkIHRvIGFueSBjaGFuZ2VzIG9mIGh0bWwtY29kZS4KICoKICog U2V0dXA6CiAqIEp1c3QgaW5jbHVkZSB0aGlzIGNiaXIuanMsIG1ha2UgbmV3IG9i amVjdCBteUNiaXIgYW5kIGRlZmluZSBpbWFnZXMuCiAqIEV4YW1wbGU6CiA8c2Ny aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJjYmlyLmpzIj48L3Njcmlw dD4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4gCiAgIHdpbmRvdy5v bmxvYWQgPSBmdW5jdGlvbiAoKSB7bXlDYmlyID0gbmV3IENiaXIoJ2NoZWNrX29u LmdpZicsICdjaGVja19vZmYuZ2lmJywgICdjaGVja19kaXMuZ2lmJyk7fQogPC9z Y3JpcHQ+CiAqIHdoZXJlIGltYWdlczogY2hlY2tlZCBjaGVja2JveCwgdW5jaGVj a2VkIGNoZWNrYm94LCBkaXNhYmxlZCBjaGVja2JveC4KICogKGRpc2FibGVkIGlz IG5vdCByZXF1aXJlZCkKICovCgovKgpBZGRlZCBwbmcgc3VwcG9ydCBmb3IgSUUg YnkgTGFya2luCiovCgp2YXIgaXNJRSA9IChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5p bmRleE9mKCJNU0lFIik+IC0xKT90cnVlOmZhbHNlOwppZihpc0lFKQp7CnZhciBh clZlcnNpb24gPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbi5zcGxpdCgiTVNJRSIpOwp2 YXIgdmVyc2lvbiA9IHBhcnNlRmxvYXQoYXJWZXJzaW9uWzFdKTsKfQoKCmZ1bmN0 aW9uIENiaXIoaW5pdCkgewoJdGhpcy5pbklkID0gYXJndW1lbnRzWzFdOwoJdGhp cy5pbml0T2JqID0gaW5pdDsKCXRoaXMuaW1nX29uID0gbmV3IEltYWdlKCk7Cgl0 aGlzLmltZ19vZmYgPSBuZXcgSW1hZ2UoKTsKCXRoaXMuaW1nX29uLnNyYyA9IGlu aXQuZGVmWzBdOwoJdGhpcy5pbWdfb2ZmLnNyYyA9IGluaXQuZGVmWzFdOwoJdGhp cy5wbmdNb2RlID0gKGluaXQuZGVmWzBdLmluZGV4T2YoJy5wbmcnKT4tMSB8fCBp bml0LmRlZlsxXS5pbmRleE9mKCcucG5nJyk+LTEpP3RydWU6ZmFsc2U7CglpZiAo aW5pdC5kZWZbMl0pIHsKCQl0aGlzLmltZ19kaXMgPSBuZXcgSW1hZ2UoKTsKCQl0 aGlzLmltZ19kaXMuc3JjID0gaW5pdC5kZWZbMl07Cgl9IAoJICAgICAgICAgICAg ICAKCXRoaXMubGFiZWxzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo J2xhYmVsJyk7CiAgaWYodGhpcy5pbklkICl7CgkJdHJ5e3RoaXMuaW5wdXRzID0g JCh0aGlzLmluSWQpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpO31jYXRj aChlKXt9Cgl9IGVsc2UgewoJCXRoaXMuaW5wdXRzID0gZG9jdW1lbnQuZ2V0RWxl bWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7CgkJCgl9CiAgZm9yICh2YXIgaT0wOyBp PHRoaXMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgCQlpZih0aGlzLmlucHV0c1tp XS5nZXRBdHRyaWJ1dGUoJ3JlbCcpPT0ibm9DaGFuZ2UiKWNvbnRpbnVlOwoJCWlu cHV0ID0gdGhpcy5pbnB1dHNbaV07CiAgICBpZiAoaW5wdXQuZ2V0QXR0cmlidXRl KCd0eXBlJykgPT0gJ2NoZWNrYm94JykgewogICAgICBpZiAoIWlucHV0LmdldEF0 dHJpYnV0ZSgnaWQnKSkgewogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnaWQn LCAnY2hlY2tib3hfJyArIGlucHV0LmdldEF0dHJpYnV0ZSgnbmFtZScpICsgJ18n ICsgaSk7CiAgICAgIH0gICAgICAgIAoJICAKCSAgdmFyIGN1clNyYyA9ICh0aGlz LmltZ19kaXMgJiYgaW5wdXQuZGlzYWJsZWQpPyB0aGlzLmltZ1BpY3R1cmUoMixp bnB1dCkgOiggKGlucHV0LmNoZWNrZWQpP3RoaXMuaW1nUGljdHVyZSgwLGlucHV0 KTp0aGlzLmltZ1BpY3R1cmUoMSxpbnB1dCkpOwoJICAKCQkJaWYodGhpcy5wbmdN b2RlKQoJCQl7CgkJCQl2YXIgaW1nCT0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn c3BhbicpOwoJCQkJaWYoaXNJRSAmJiB2ZXJzaW9uIDwgNykKCQkJCQlpbWcuc3R5 bGUuZmlsdGVyID0gInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5B bHBoYUltYWdlTG9hZGVyKHNyYz0nIiArIGN1clNyY1swXSArICInLCBzaXppbmdN ZXRob2Q9J2ltYWdlJykiOwoJCQkJZWxzZQoJCQkJCWltZy5zdHlsZS5iYWNrZ3Jv dW5kSW1hZ2UgPSAidXJsKCciK2N1clNyY1swXSsiJykiOwoJCQl9CgkJCWVsc2UK CQkJewoJCQkJdmFyIGltZwk9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycp OwoJCQkJaW1nLnNyYyA9IGN1clNyY1swXTsKCQkJfQoJCQkKCQkJaW1nLnNldEF0 dHJpYnV0ZSgnaWQnLCAnaW1nXycgKyBpbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJykp OyAKCQkJaW1nLmNsYXNzTmFtZSA9ICdjaGVja2JveF9pbWcnOwoJCQlpZiAoIWlu cHV0LmRpc2FibGVkKSB7CgkJCQlpZiAoIXRoaXMuY2hlY2tMYWJlbHMoaW5wdXQp KSB7CgkJCQkgIGltZy5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IG15Q2Jpci50b2dn bGUgKHRoaXMpOyB9CgkJCQl9ICAgICAgICAgICAgICAgICAgCgkJCX0gICAgICAg ICAgICAgCgkJCQoJCQlpbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpbWcs IGlucHV0Lm5leHRTaWJsaW5nKTsKCQkJCgkJCWlmKHRoaXMucG5nTW9kZSkKCQkJ ewoJCQkJaW1nLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayI7CgkJCQkKCQkJ CWltZy5zdHlsZS53aWR0aCA9IGN1clNyY1sxXSsicHgiOwoJCQkJaW1nLnN0eWxl LmhlaWdodCA9IGN1clNyY1syXSsicHgiOwoJCQl9CgoJCQkvL2lucHV0LnN0eWxl LmRpc3BsYXkgPSAnbm9uZSc7ICAvKiB0aGlzIG1ldGhvZCBkb2Vzbid0IHdvcmsg aW4gc2FmYXJpICovCgkJCWlucHV0LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVu JzsKCQkJaW5wdXQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOwoJCQkKICAg IH0KICB9Cn0gICAgICAgCgpDYmlyLnByb3RvdHlwZS5jaGVja0xhYmVscyA9IGZ1 bmN0aW9uKGlucCkgewogIHRoaXMuaW5wX2lkID0gaW5wLmdldEF0dHJpYnV0ZSgn aWQnKTsKCSAgICAgICAgICAgICAgICAgICAgCiAgdGhpcy5pbnBfcGFyZW50ID0g aW5wLnBhcmVudE5vZGU7CiAgaWYgKHRoaXMuaW5wX3BhcmVudC50YWdOYW1lLnRv TG93ZXJDYXNlKCkgPT0gJ2xhYmVsJykgewogICAgdGhpcy5pbnBfcGFyZW50LnNl dEF0dHJpYnV0ZSgnaWQnLCAnbGFiZWxfJyArIHRoaXMuaW5wX2lkKTsgICAgCiAg ICB0aGlzLmlucF9wYXJlbnQub25jbGljayA9IGZ1bmN0aW9uKCkgeyBteUNiaXIu dG9nZ2xlICh0aGlzKTt9CgkJcmV0dXJuIHRydWU7ICAgICAgCiAgfQogIGZvciAo dmFyIGk9MDsgaTx0aGlzLmxhYmVscy5sZW5ndGg7IGkrKykgewogICAgbGJsID0g dGhpcy5sYWJlbHNbaV07CiAgICBpZiAobGJsLmh0bWxGb3IgPT0gdGhpcy5pbnBf aWQpIHsKICAgICAgbGJsLnNldEF0dHJpYnV0ZSgnaWQnLCAnbGFiZWxfJyArIHRo aXMuaW5wX2lkKTsgICAgIAogICAgCWxibC5vbmNsaWNrID0gZnVuY3Rpb24oKSB7 IG15Q2Jpci50b2dnbGUgKHRoaXMpOyByZXR1cm4gZmFsc2U7IH0KICAgIH0KICB9 CiAgcmV0dXJuIGZhbHNlOwp9ICAgICAKLy9BZGQgYnkgQWxkZWdyYW4KQ2Jpci5w cm90b3R5cGUuaW1nUGljdHVyZSA9IGZ1bmN0aW9uKHR5cGUscmFkaW8pIHsKCXZh ciByZXQgPSBuZXcgQXJyYXkgKHRoaXMuaW1nX29uLnNyYyx0aGlzLmltZ19vbi53 aWR0aCx0aGlzLmltZ19vbi5oZWlnaHQpOwoJdmFyIGNsYXMgPSByYWRpby5jbGFz c05hbWU7CglpZihjbGFzLmluZGV4T2YoJyAnKT4wKSB7CgkJY2xhcyA9IGNsYXMu c3BsaXQoIiAiKTsKCQlmb3IodmFyIG09MDsgbTxjbGFzLmxlbmd0aDsgbSsrKSB7 CgkJCXZhciBmaW5kID0gZmFsc2U7CgkJCWZvcih2YXIgbiBpbiB0aGlzLmluaXRP YmopIHsKCQkJCWlmKG4gPT0gImRlZiIpIHsKCQkJCQljb250aW51ZTsKCQkJCX0g ZWxzZSB7CgkJCQkJaWYoY2xhc1ttXSA9PSBuKSB7CgkJCQkJCWlmKHRoaXMuaW5p dE9ialtuXVt0eXBlXSl7CgkJCQkJCQlyZXQgPSB0aGlzLmluaXRPYmpbbl1bdHlw ZV07CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlzd2l0Y2godHlwZSkKCQkJCQkJCXsK CQkJCQkJCQljYXNlIDE6IHJldCA9IFt0aGlzLmltZ19vZmYuc3JjLHRoaXMuaW1n X29mZi53aWR0aCx0aGlzLmltZ19vZmYuaGVpZ2h0XTsgYnJlYWs7CgkJCQkJCQkJ Y2FzZSAyOiByZXQgPSBbdGhpcy5pbWdfZGlzLnNyYyx0aGlzLmltZ19kaXMud2lk dGgsdGhpcy5pbWdfZGlzLmhlaWdodF07IGJyZWFrOwoJCQkJCQkJfQoJCQkJCQl9 CgkJCQkJCWZpbmQgPSB0cnVlOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJ CX0KCQkJaWYoZmluZCl7CgkJCQlicmVhazsKCQkJfQoJCX0KCX0gZWxzZSB7CgkJ c3dpdGNoKHR5cGUpCgkJewoJCQljYXNlIDE6IHJldCA9IFt0aGlzLmltZ19vZmYu c3JjLHRoaXMuaW1nX29mZi53aWR0aCx0aGlzLmltZ19vZmYuaGVpZ2h0XTsgYnJl YWs7CgkJCWNhc2UgMjogcmV0ID0gW3RoaXMuaW1nX2Rpcy5zcmMsdGhpcy5pbWdf ZGlzLndpZHRoLHRoaXMuaW1nX2Rpcy5oZWlnaHRdOyBicmVhazsKCQl9Cgl9Cgly ZXR1cm4gcmV0Owp9Ci8vCkNiaXIucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9u KGVsKSB7CiAgaWYgKCFlbCkgcmV0dXJuIGZhbHNlOyAgCiAgICAgICAgICAgICAg ICAKCWlkID0gKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnaW1nJyB8fCBl bC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ3NwYW4nKSA/IGVsLmdldEF0dHJp YnV0ZSgnaWQnKS5yZXBsYWNlKCdpbWdfJywgJycpIDogZWwuZ2V0QXR0cmlidXRl KCdpZCcpLnJlcGxhY2UoJ2xhYmVsXycsICcnKTsKICBjaGVja2JveCA9IGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKGlkKTsgICAgCiAgaW1nID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoJ2ltZ18nICsgaWQpOwogIAogIGNoZWNrYm94LmNsaWNrKCk7 ICAgCgogIHZhciBjdXJTcmMgPSBjaGVja2JveC5jaGVja2VkID8gdGhpcy5pbWdQ aWN0dXJlKDAsY2hlY2tib3gpIDogdGhpcy5pbWdQaWN0dXJlKDEsY2hlY2tib3gp OyAgICAgICAgICAgCgkgIAoJCQlpZih0aGlzLnBuZ01vZGUpCgkJCXsKCQkJCWlm KGlzSUUgJiYgdmVyc2lvbiA8IDcpCgkJCQkJaW1nLnN0eWxlLmZpbHRlciA9ICJw cm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRl cihzcmM9JyIgKyBjdXJTcmNbMF0gKyAiJywgc2l6aW5nTWV0aG9kPSdpbWFnZScp IjsKCQkJCWVsc2UKCQkJCQlpbWcuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gInVy bCgnIitjdXJTcmNbMF0rIicpIjsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWltZy5z cmMgPSBjdXJTcmNbMF07CgkJCX0KfSAgIAo= ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=window.js Content-Type: application/javascript; charset=UTF-8; name=window.js Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/window.js Content-Transfer-Encoding: Base64 Ly8gQ29weXJpZ2h0IChjKSAyMDA2IFPDqWJhc3RpZW4gR3J1aGllciAoaHR0cDov L3hpbGludXMuY29tLCBodHRwOi8vaXRzZWIuY29tKQovLyAKLy8gUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nCi8vIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQovLyAiU29mdHdhcmUiKSwg dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nCi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLy8gZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvCi8vIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwovLyB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6Ci8vIAovLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQovLyBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2Fy ZS4KLy8KLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi8vIEVYUFJFU1MgT1IgSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgov LyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORAovLyBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCi8vIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04KLy8gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi8vIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNP RlRXQVJFLgovLwovLyBWRVJTSU9OIDAuOTYuMgoKdmFyIFdpbmRvdyA9IENsYXNz LmNyZWF0ZSgpOwpXaW5kb3cucHJvdG90eXBlID0gewoJLy8gQ29uc3RydWN0b3IK CS8vIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogY2xhc3NOYW1lLCB0aXRsZSwgbWlu V2lkdGgsIG1pbkhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgd2lkdGgsIGhl aWdodCwgdG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0LCByZXNpemFibGUsIHpJbmRl eCwgb3BhY2l0eSwgCgkvLyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVFZmZl Y3QsIHNob3dFZmZlY3QsIHNob3dFZmZlY3RPcHRpb25zLCBoaWRlRWZmZWN0T3B0 aW9ucywgZWZmZWN0T3B0aW9ucywgdXJsLCBkcmFnZ2FibGUsIGNsb3NhYmxlLCBt aW5pbWl6YWJsZSwgbWF4aW1pemFibGUsIHBhcmVudCwgb25sb2FkCglpbml0aWFs aXplOiBmdW5jdGlvbihpZCkgewoJICBpZiAoJChpZCkpCgkgICAgYWxlcnQoIldp bmRvdyAiICsgaWQgKyAiIGlzIGFscmVhZHkgcmVnaXN0ZXIgaXMgdGhlIERPTSEh LCBiZSBzdXJlIHRvIHVzZSBzZXREZXN0cm95T25DbG9zZSgpIikKCSAgICAKCQl0 aGlzLmhhc0VmZmVjdExpYiA9IFN0cmluZy5wcm90b3R5cGUucGFyc2VDb2xvciAh PSBudWxsOwoJCXRoaXMub3B0aW9ucyA9IE9iamVjdC5leHRlbmQoewoJCSAgY2xh c3NOYW1lOiAgICAgICAgICJkaWFsb2ciLAogICAgICBtaW5XaWR0aDogICAgICAg ICAgMTAwLAogICAgICBtaW5IZWlnaHQ6ICAgICAgICAgMjAsCiAgICAgIHJlc2l6 YWJsZTogICAgICAgICB0cnVlLAogICAgICBjbG9zYWJsZTogICAgICAgICAgdHJ1 ZSwKICAgICAgbWluaW1pemFibGU6ICAgICAgIHRydWUsCiAgICAgIG1heGltaXph YmxlOiAgICAgICB0cnVlLAogICAgICBkcmFnZ2FibGU6ICAgICAgICAgdHJ1ZSwK ICAgICAgdXNlckRhdGE6ICAgICAgICAgIG51bGwsCiAgICAgIHNob3dFZmZlY3Q6 ICAgICAgICAodGhpcy5oYXNFZmZlY3RMaWIgPyBFZmZlY3QuQXBwZWFyIDogRWxl bWVudC5zaG93KSwKICAgICAgaGlkZUVmZmVjdDogICAgICAgICh0aGlzLmhhc0Vm ZmVjdExpYiA/IEVmZmVjdC5GYWRlIDogRWxlbWVudC5oaWRlKSwKICAgICAgc2hv d0VmZmVjdE9wdGlvbnM6IHt9LAogICAgICBoaWRlRWZmZWN0T3B0aW9uczoge30s CiAgICAgIGVmZmVjdE9wdGlvbnM6ICAgICBudWxsLAogICAgICBwYXJlbnQ6ICAg ICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKS5p dGVtKDApLAogICAgICB0aXRsZTogICAgICAgICAgICAgIiZuYnNwOyIsCiAgICAg IHVybDogICAgICAgICAgICAgICBudWxsLAogICAgICBvbmxvYWQ6ICAgICAgICAg ICAgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24sCiAgICAgIHdpZHRoOiAgICAgICAg ICAgICAyMDAsCiAgICAgIGhlaWdodDogICAgICAgICAgICAzMDAsCiAgICAgIG9w YWNpdHk6ICAgICAgICAgICAxCiAgICB9LCBhcmd1bWVudHNbMV0gfHwge30pOwog ICAgCQkKCSAgaWYgKHRoaXMub3B0aW9ucy5lZmZlY3RPcHRpb25zKSB7CgkgICAg T2JqZWN0LmV4dGVuZCh0aGlzLm9wdGlvbnMuaGlkZUVmZmVjdE9wdGlvbnMsIHRo aXMub3B0aW9ucy5lZmZlY3RPcHRpb25zKTsKCSAgICBPYmplY3QuZXh0ZW5kKHRo aXMub3B0aW9ucy5zaG93RWZmZWN0T3B0aW9ucywgdGhpcy5vcHRpb25zLmVmZmVj dE9wdGlvbnMpOwoJICB9CgkJaWYgKHRoaXMub3B0aW9ucy5oaWRlRWZmZWN0ID09 IEVsZW1lbnQuaGlkZSkKCQkgIHRoaXMub3B0aW9ucy5oaWRlRWZmZWN0ID0gZnVu Y3Rpb24oKXsgRWxlbWVudC5oaWRlKHRoaXMuZWxlbWVudCk7IGlmICh0aGlzLmRl c3Ryb3lPbkNsb3NlKSB0aGlzLmRlc3Ryb3koKTsgfS5iaW5kKHRoaXMpCgkJICAK CQl0aGlzLmVsZW1lbnQgPSB0aGlzLl9jcmVhdGVXaW5kb3coaWQpOwoJCQoJCS8v IEJpbmQgZXZlbnQgbGlzdGVuZXIKICAgIHRoaXMuZXZlbnRNb3VzZURvd24gPSB0 aGlzLl9pbml0RHJhZy5iaW5kQXNFdmVudExpc3RlbmVyKHRoaXMpOwogIAl0aGlz LmV2ZW50TW91c2VVcCAgID0gdGhpcy5fZW5kRHJhZy5iaW5kQXNFdmVudExpc3Rl bmVyKHRoaXMpOwogIAl0aGlzLmV2ZW50TW91c2VNb3ZlID0gdGhpcy5fdXBkYXRl RHJhZy5iaW5kQXNFdmVudExpc3RlbmVyKHRoaXMpOwogIAl0aGlzLmV2ZW50S2V5 UHJlc3MgID0gdGhpcy5fa2V5UHJlc3MuYmluZEFzRXZlbnRMaXN0ZW5lcih0aGlz KTsKICAJdGhpcy5ldmVudE9uTG9hZCAgICA9IHRoaXMuX2dldFdpbmRvd0JvcmRl clNpemUuYmluZEFzRXZlbnRMaXN0ZW5lcih0aGlzKTsKICAgIHRoaXMuZXZlbnRN b3VzZURvd25Db250ZW50ID0gdGhpcy50b0Zyb250LmJpbmRBc0V2ZW50TGlzdGVu ZXIodGhpcyk7CiAgICB0aGlzLmV2ZW50UmVzaXplID0gdGhpcy5fcmVjZW50ZXIu YmluZEFzRXZlbnRMaXN0ZW5lcih0aGlzKTsKIAoJCXRoaXMudG9wYmFyID0gJCh0 aGlzLmVsZW1lbnQuaWQgKyAiX3RvcCIpOwoJCXRoaXMuYm90dG9tYmFyID0gJCh0 aGlzLmVsZW1lbnQuaWQgKyAiX2JvdHRvbSIpOwogICAgdGhpcy5jb250ZW50ID0g JCh0aGlzLmVsZW1lbnQuaWQgKyAiX2NvbnRlbnQiKTsKICAgIAoJCUV2ZW50Lm9i c2VydmUodGhpcy50b3BiYXIsICJtb3VzZWRvd24iLCB0aGlzLmV2ZW50TW91c2VE b3duKTsKCQlFdmVudC5vYnNlcnZlKHRoaXMuYm90dG9tYmFyLCAibW91c2Vkb3du IiwgdGhpcy5ldmVudE1vdXNlRG93bik7CgkJRXZlbnQub2JzZXJ2ZSh0aGlzLmNv bnRlbnQsICJtb3VzZWRvd24iLCB0aGlzLmV2ZW50TW91c2VEb3duQ29udGVudCk7 CgkJRXZlbnQub2JzZXJ2ZSh3aW5kb3csICJsb2FkIiwgdGhpcy5ldmVudE9uTG9h ZCk7CgkJRXZlbnQub2JzZXJ2ZSh3aW5kb3csICJyZXNpemUiLCB0aGlzLmV2ZW50 UmVzaXplKTsKICAJRXZlbnQub2JzZXJ2ZSh3aW5kb3csICJzY3JvbGwiLCB0aGlz LmV2ZW50UmVzaXplKTsKICAJCgkJaWYgKHRoaXMub3B0aW9ucy5kcmFnZ2FibGUp ICB7CgkJCXRoaXMuYm90dG9tYmFyLmFkZENsYXNzTmFtZSgiYm90dG9tX2RyYWdn YWJsZSIpOwoJCQl0aGlzLnRvcGJhci5hZGRDbGFzc05hbWUoInRvcF9kcmFnZ2Fi bGUiKTsKICAgIH0JCQogICAgCgkJaWYgKHRoaXMub3B0aW9ucy5yZXNpemFibGUp IHsKCQkJdGhpcy5zaXplciA9ICQodGhpcy5lbGVtZW50LmlkICsgIl9zaXplciIp OwogICAgCUV2ZW50Lm9ic2VydmUodGhpcy5zaXplciwgIm1vdXNlZG93biIsIHRo aXMuZXZlbnRNb3VzZURvd24pOwogICAgfQkKICAgIAogICAgdGhpcy51c2VMZWZ0 ID0gbnVsbDsKICAgIHRoaXMudXNlVG9wID0gbnVsbDsKCQlpZiAoYXJndW1lbnRz WzFdLmxlZnQgIT0gbnVsbCkgewoJCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGUoe2xl ZnQ6IHBhcnNlRmxvYXQoYXJndW1lbnRzWzFdLmxlZnQpICsgJ3B4J30pOwoJCQl0 aGlzLnVzZUxlZnQgPSB0cnVlOwoJCX0KCQlpZiAoYXJndW1lbnRzWzFdLnJpZ2h0 ICE9IG51bGwpIHsKCQkJdGhpcy5lbGVtZW50LnNldFN0eWxlKHtyaWdodDogcGFy c2VGbG9hdChhcmd1bWVudHNbMV0ucmlnaHQpICsgJ3B4J30pOwoJCQl0aGlzLnVz ZUxlZnQgPSBmYWxzZTsKCQl9CiAgICBpZiAodGhpcy51c2VMZWZ0ID09IG51bGwp IHsKCSAgICB0aGlzLmVsZW1lbnQuc2V0U3R5bGUoe2xlZnQ6ICIwcHgifSk7CgkJ CXRoaXMudXNlTGVmdCA9IHRydWU7CiAgICB9CiAgICAKCQlpZiAoYXJndW1lbnRz WzFdLnRvcCAhPSBudWxsKSB7CgkJCXRoaXMuZWxlbWVudC5zZXRTdHlsZSh7dG9w OiBwYXJzZUZsb2F0KGFyZ3VtZW50c1sxXS50b3ApICsgJ3B4J30pOwoJCQl0aGlz LnVzZVRvcCA9IHRydWU7CgkJfQoJCWlmIChhcmd1bWVudHNbMV0uYm90dG9tICE9 IG51bGwpIHsKCQkJdGhpcy5lbGVtZW50LnNldFN0eWxlKHtib3R0b206IHBhcnNl RmxvYXQoYXJndW1lbnRzWzFdLmJvdHRvbSkgKyAncHgnfSk7CQkJCgkJCXRoaXMu dXNlVG9wID0gZmFsc2U7CgkJfQogICAgaWYgKHRoaXMudXNlVG9wID09IG51bGwp IHsKCQkJdGhpcy5lbGVtZW50LnNldFN0eWxlKHt0b3A6ICIwcHgifSk7CgkJCXRo aXMudXNlVG9wID0gdHJ1ZTsKICAgIH0KCiAgICB0aGlzLnN0b3JlZExvY2F0aW9u ID0gbnVsbDsKICAgIAoJCXRoaXMuc2V0T3BhY2l0eSh0aGlzLm9wdGlvbnMub3Bh Y2l0eSk7CgkJaWYgKHRoaXMub3B0aW9ucy56SW5kZXgpCgkJCXRoaXMuc2V0Wklu ZGV4KHRoaXMub3B0aW9ucy56SW5kZXgpCgoJCXRoaXMuZGVzdHJveU9uQ2xvc2Ug PSBmYWxzZTsKCiAgICB0aGlzLl9nZXRXaW5kb3dCb3JkZXJTaXplKCk7CiAgICB0 aGlzLndpZHRoID0gdGhpcy5vcHRpb25zLndpZHRoOwogICAgdGhpcy5oZWlnaHQg PSB0aGlzLm9wdGlvbnMuaGVpZ2h0OwogICAgCiAgICBpZiAodGhpcy53aWR0aCAm JiB0aGlzLmhlaWdodCkKCQkgIHRoaXMuc2V0U2l6ZSh0aGlzLm9wdGlvbnMud2lk dGgsIHRoaXMub3B0aW9ucy5oZWlnaHQpOwoJCXRoaXMuc2V0VGl0bGUodGhpcy5v cHRpb25zLnRpdGxlKQoJCVdpbmRvd3MucmVnaXN0ZXIodGhpcyk7CSAgICAKICB9 LAogIAoJLy8gRGVzdHJ1Y3RvcgogCWRlc3Ryb3k6IGZ1bmN0aW9uKCkgewoJCVdp bmRvd3Mubm90aWZ5KCJvbkRlc3Ryb3kiLCB0aGlzKTsKCQkKICAJRXZlbnQuc3Rv cE9ic2VydmluZyh0aGlzLnRvcGJhciwgIm1vdXNlZG93biIsIHRoaXMuZXZlbnRN b3VzZURvd24pOwogIAlFdmVudC5zdG9wT2JzZXJ2aW5nKHRoaXMuYm90dG9tYmFy LCAibW91c2Vkb3duIiwgdGhpcy5ldmVudE1vdXNlRG93bik7CiAgCUV2ZW50LnN0 b3BPYnNlcnZpbmcodGhpcy5jb250ZW50LCAibW91c2Vkb3duIiwgdGhpcy5ldmVu dE1vdXNlRG93bkNvbnRlbnQpOwogICAgCgkJRXZlbnQuc3RvcE9ic2VydmluZyh3 aW5kb3csICJsb2FkIiwgdGhpcy5ldmVudE9uTG9hZCk7CgkJRXZlbnQuc3RvcE9i c2VydmluZyh3aW5kb3csICJyZXNpemUiLCB0aGlzLmV2ZW50UmVzaXplKTsKICAJ RXZlbnQuc3RvcE9ic2VydmluZyh3aW5kb3csICJzY3JvbGwiLCB0aGlzLmV2ZW50 UmVzaXplKTsKCQkKCQlFdmVudC5zdG9wT2JzZXJ2aW5nKHRoaXMuY29udGVudCwg ImxvYWQiLCB0aGlzLm9wdGlvbnMub25sb2FkKTsKCgkJaWYgKHRoaXMuc2l6ZXIp CiAgICAJCUV2ZW50LnN0b3BPYnNlcnZpbmcodGhpcy5zaXplciwgIm1vdXNlZG93 biIsIHRoaXMuZXZlbnRNb3VzZURvd24pOwoKCQlpZiAodGhpcy5vcHRpb25zLnVy bCkKCQkgIHRoaXMuY29udGVudC5zcmMgPSBudWxsCgoJIAlpZih0aGlzLmllZml4 KSAKCQkJRWxlbWVudC5yZW1vdmUodGhpcy5pZWZpeCk7CgogICAgRWxlbWVudC5y ZW1vdmUodGhpcy5lbGVtZW50KTsKCQlXaW5kb3dzLnVucmVnaXN0ZXIodGhpcyk7 CSAgICAKCX0sCiAgCQoJLy8gU2V0cyB3aW5kb3cgZGVsZWFndGUsIHNob3VsZCBo YXZlIGZ1bmN0aW9uczogImNhbkNsb3NlKHdpbmRvdykiIAoJc2V0RGVsZWdhdGU6 IGZ1bmN0aW9uKGRlbGVnYXRlKSB7CgkJdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRl Cgl9LAoJCgkvLyBHZXRzIGN1cnJlbnQgd2luZG93IGRlbGVnYXRlCglnZXREZWxl Z2F0ZTogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMuZGVsZWdhdGU7Cgl9LAoJ CgkvLyBHZXRzIHdpbmRvdyBjb250ZW50CglnZXRDb250ZW50OiBmdW5jdGlvbiAo KSB7CgkJcmV0dXJuIHRoaXMuY29udGVudDsKCX0sCgkKCS8vIFNldHMgdGhlIGNv bnRlbnQgd2l0aCBhbiBlbGVtZW50IGlkCglzZXRDb250ZW50OiBmdW5jdGlvbihp ZCwgYXV0b3Jlc2l6ZSwgYXV0b3Bvc2l0aW9uKSB7CgkJdmFyIGQgPSBudWxsOwoJ CXZhciBwID0gbnVsbDsKCgkJaWYgKGF1dG9yZXNpemUpIAoJCQlkID0gRWxlbWVu dC5nZXREaW1lbnNpb25zKGlkKTsKCQlpZiAoYXV0b3Bvc2l0aW9uKSAKCQkJcCA9 IFBvc2l0aW9uLmN1bXVsYXRpdmVPZmZzZXQoJChpZCkpOwoKCQl2YXIgY29udGVu dCA9IHRoaXMuZ2V0Q29udGVudCgpCgkJY29udGVudC5hcHBlbmRDaGlsZCgkKGlk KSk7CgkJJChpZCkuc2hvdygpOwoJCWlmIChhdXRvcmVzaXplKSAKCQkJdGhpcy5z ZXRTaXplKGQud2lkdGgsIGQuaGVpZ2h0KTsKCQlpZiAoYXV0b3Bvc2l0aW9uKSAK CQkgIHRoaXMuc2V0TG9jYXRpb24ocFsxXSAtIHRoaXMuaGVpZ2h0TiwgcFswXSAt IHRoaXMud2lkdGhXKTsJICAKCX0sCgkKCXNldEFqYXhDb250ZW50OiBmdW5jdGlv bih1cmwsIG9wdGlvbnMsIHNob3dDZW50ZXJlZCwgc2hvd01vZGFsKSB7CgkgIHRo aXMuc2hvd0Z1bmN0aW9uID0gc2hvd0NlbnRlcmVkID8gInNob3dDZW50ZXIiIDog InNob3ciOwoJICB0aGlzLnNob3dNb2RhbCA9IHNob3dNb2RhbCB8fCBmYWxzZTsK CQoJICBpZiAob3B0aW9ucyA9PSBudWxsKQoJICAgIG9wdGlvbnMgPSB7fSAgCgkg IHRoaXMub25Db21wbGV0ZSA9IG9wdGlvbnMub25Db21wbGV0ZTsKCSAgb3B0aW9u cy5vbkNvbXBsZXRlID0gdGhpcy5fc2V0QWpheENvbnRlbnQuYmluZCh0aGlzKTsK CSAgCgkgIG5ldyBBamF4LlJlcXVlc3QodXJsLCBvcHRpb25zKTsKCX0sCgkKCV9z ZXRBamF4Q29udGVudDogZnVuY3Rpb24ob3JpZ2luYWxSZXF1ZXN0KSB7CgkgIHRo aXMuZ2V0Q29udGVudCgpLmlubmVySFRNTCA9IG9yaWdpbmFsUmVxdWVzdC5yZXNw b25zZVRleHQ7CgkgIGlmICh0aGlzLm9uQ29tcGxldGUpCgkgICAgdGhpcy5vbkNv bXBsZXRlKG9yaWdpbmFsUmVxdWVzdCk7CgkgIHRoaXNbdGhpcy5zaG93RnVuY3Rp b25dKHRoaXMuc2hvd01vZGFsKQoJfSwKCQoJLy8gU3RvcmVzIHBvc2l0aW9uL3Np emUgaW4gYSBjb29raWUsIGJ5IGRlZmF1bHQgbmFtZWQgd2l0aCB3aW5kb3cgaWQK CXNldENvb2tpZTogZnVuY3Rpb24obmFtZSwgZXhwaXJlcywgcGF0aCwgZG9tYWlu LCBzZWN1cmUpIHsKCQluYW1lID0gbmFtZSB8fCB0aGlzLmVsZW1lbnQuaWQ7CgkJ dGhpcy5jb29raWUgPSBbbmFtZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1 cmVdOwoJCQoJCS8vIEdldCBjb29raWUKCQl2YXIgdmFsdWUgPSBXaW5kb3dVdGls aXRpZXMuZ2V0Q29va2llKG5hbWUpCgkJLy8gSWYgZXhpc3RzCgkJaWYgKHZhbHVl KSB7CgkJCXZhciB2YWx1ZXMgPSB2YWx1ZS5zcGxpdCgnLCcpOwoJCQl2YXIgeCA9 IHZhbHVlc1swXS5zcGxpdCgnOicpOwoJCQl2YXIgeSA9IHZhbHVlc1sxXS5zcGxp dCgnOicpOwoKCQkJdmFyIHcgPSBwYXJzZUZsb2F0KHZhbHVlc1syXSksIGggPSBw YXJzZUZsb2F0KHZhbHVlc1szXSk7CgkJCXZhciBtaW5pID0gdmFsdWVzWzRdOwoJ CQl2YXIgbWF4aSA9IHZhbHVlc1s1XTsKCgkJICB0aGlzLnNldFNpemUodywgaCk7 CgkJCWlmIChtaW5pID09ICJ0cnVlIikKCQkgICAgdGhpcy5kb01pbmltaXplID0g dHJ1ZTsgLy8gTWluaW1pemUgd2lsbCBiZSBkb25lIGF0IG9ubG9hZCB3aW5kb3cg ZXZlbnQKCQkJZWxzZSBpZiAobWF4aSA9PSAidHJ1ZSIpCgkJCSAgdGhpcy5kb01h eGltaXplID0gdHJ1ZTsgLy8gTWF4aW1pemUgd2lsbCBiZSBkb25lIGF0IG9ubG9h ZCB3aW5kb3cgZXZlbnQKCgkJCXRoaXMudXNlTGVmdCA9IHhbMF0gPT0gImwiOwoJ CQl0aGlzLnVzZVRvcCA9IHlbMF0gPT0gInQiOwoKCQkJdGhpcy5lbGVtZW50LnNl dFN0eWxlKHRoaXMudXNlTGVmdCA/IHtsZWZ0OiB4WzFdfSA6IHtyaWdodDogeFsx XX0pOwoJCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGUodGhpcy51c2VUb3AgPyB7dG9w OiB5WzFdfSA6IHtib3R0b206IHlbMV19KTsKCQl9Cgl9LAoJCgkvLyBHZXRzIHdp bmRvdyBJRAoJZ2V0SWQ6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLmVsZW1l bnQuaWQ7Cgl9LAoJCgkvLyBEZXRyb3lzIGl0c2VsZiB3aGVuIGNsb3NpbmcgCglz ZXREZXN0cm95T25DbG9zZTogZnVuY3Rpb24oKSB7CgkgIE9iamVjdC5leHRlbmQo dGhpcy5vcHRpb25zLmhpZGVFZmZlY3RPcHRpb25zLCB7YWZ0ZXJGaW5pc2g6ICB0 aGlzLmRlc3Ryb3kuYmluZCh0aGlzKX0pOwoJCXRoaXMuZGVzdHJveU9uQ2xvc2Ug PSB0cnVlOwoJfSwKCQoJLy8gaW5pdERyYWcgZXZlbnQKCV9pbml0RHJhZzogZnVu Y3Rpb24oZXZlbnQpIHsKICAgIC8vIEdldCBwb2ludGVyIFgsWQogIAl0aGlzLnBv aW50ZXIgPSBbRXZlbnQucG9pbnRlclgoZXZlbnQpLCBFdmVudC5wb2ludGVyWShl dmVudCldOwoKICAgIC8vIFJlc2l6ZQoJCWlmIChFdmVudC5lbGVtZW50KGV2ZW50 KSA9PSB0aGlzLnNpemVyKSB7CgkJCXRoaXMuZG9SZXNpemUgPSB0cnVlOwogICAg CXRoaXMud2lkdGhPcmcgPSB0aGlzLndpZHRoOwogICAgCXRoaXMuaGVpZ2h0T3Jn ID0gdGhpcy5oZWlnaHQ7CiAgICAJdGhpcy5ib3R0b21PcmcgPSBwYXJzZUZsb2F0 KHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnYm90dG9tJykpOwogICAgCXRoaXMucmln aHRPcmcgPSBwYXJzZUZsb2F0KHRoaXMuZWxlbWVudC5nZXRTdHlsZSgncmlnaHQn KSk7CgkJCVdpbmRvd3Mubm90aWZ5KCJvblN0YXJ0UmVzaXplIiwgdGhpcyk7CgkJ fQogICAgZWxzZSB7CgkJICB0aGlzLmRvUmVzaXplID0gZmFsc2U7CgogIAkJLy8g Q2hlY2sgaWYgY2xpY2sgb24gY2xvc2UgYnV0dG9uLCAKICAJCXZhciBjbG9zZUJ1 dHRvbiA9ICQodGhpcy5nZXRJZCgpICsgJ19jbG9zZScpOwogIAkJaWYgKGNsb3Nl QnV0dG9uICYmIFBvc2l0aW9uLndpdGhpbihjbG9zZUJ1dHRvbiwgdGhpcy5wb2lu dGVyWzBdLCB0aGlzLnBvaW50ZXJbMV0pKSAKICAJCQlyZXR1cm47CgogIAkJdGhp cy50b0Zyb250KCk7CgogIAkJaWYgKCEgdGhpcy5vcHRpb25zLmRyYWdnYWJsZSkg CiAgCQkgIHJldHVybjsKICAJCVdpbmRvd3Mubm90aWZ5KCJvblN0YXJ0TW92ZSIs IHRoaXMpOwogICAgfSAgCQogIAkvLyBSZWdpc3RlciBnbG9iYWwgZXZlbnQgdG8g Y2FwdHVyZSBtb3VzZVVwIGFuZCBtb3VzZU1vdmUKICAJRXZlbnQub2JzZXJ2ZShk b2N1bWVudCwgIm1vdXNldXAiLCB0aGlzLmV2ZW50TW91c2VVcCwgZmFsc2UpOwog ICAgRXZlbnQub2JzZXJ2ZShkb2N1bWVudCwgIm1vdXNlbW92ZSIsIHRoaXMuZXZl bnRNb3VzZU1vdmUsIGZhbHNlKTsKCQkKICAJLy8gQWRkIGFuIGludmlzaWJsZSBk aXYgdG8ga2VlcCBjYXRjaGluZyBtb3VzZSBldmVudCBvdmVyIGlmcmFtZXMKICAJ V2luZG93VXRpbGl0aWVzLmRpc2FibGVTY3JlZW4oJ19faW52aXNpYmxlX18nLCAn X19pbnZpc2libGVfXycpOwoKICAgIC8vIFN0b3Agc2VsZWN0aW9uIHdoaWxlIGRy YWdnaW5nCiAgICBkb2N1bWVudC5ib2R5Lm9uZHJhZyA9IGZ1bmN0aW9uICgpIHsg cmV0dXJuIGZhbHNlOyB9OwogICAgZG9jdW1lbnQuYm9keS5vbnNlbGVjdHN0YXJ0 ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH07CiAgICAKICAgIEV2ZW50 LnN0b3AoZXZlbnQpOwogIH0sCgogIC8vIHVwZGF0ZURyYWcgZXZlbnQKCV91cGRh dGVEcmFnOiBmdW5jdGlvbihldmVudCkgewogICAJdmFyIHBvaW50ZXIgPSBbRXZl bnQucG9pbnRlclgoZXZlbnQpLCBFdmVudC5wb2ludGVyWShldmVudCldOyAgICAK CQl2YXIgZHggPSBwb2ludGVyWzBdIC0gdGhpcy5wb2ludGVyWzBdOwoJCXZhciBk eSA9IHBvaW50ZXJbMV0gLSB0aGlzLnBvaW50ZXJbMV07CgkJCgkJLy8gUmVzaXpl IGNhc2UsIHVwZGF0ZSB3aWR0aC9oZWlnaHQKCQlpZiAodGhpcy5kb1Jlc2l6ZSkg ewoJCQl0aGlzLnNldFNpemUodGhpcy53aWR0aE9yZyArIGR4ICwgdGhpcy5oZWln aHRPcmcgKyBkeSk7CgkJCQogICAgICBkeCA9IHRoaXMud2lkdGggLSB0aGlzLndp ZHRoT3JnCiAgICAgIGR5ID0gdGhpcy5oZWlnaHQgLSB0aGlzLmhlaWdodE9yZwoJ CQkKCQkgIC8vIENoZWNrIGlmIGl0J3MgYSByaWdodCBwb3NpdGlvbiwgdXBkYXRl IGl0IHRvIGtlZXAgdXBwZXItbGVmdCBjb3JuZXIgYXQgdGhlIHNhbWUgcG9zaXRp b24KCQkJaWYgKCEgdGhpcy51c2VMZWZ0KSAKCQkJCXRoaXMuZWxlbWVudC5zZXRT dHlsZSh7cmlnaHQ6ICh0aGlzLnJpZ2h0T3JnIC1keCkgKyAncHgnfSk7CgkJCS8v IENoZWNrIGlmIGl0J3MgYSBib3R0b20gcG9zaXRpb24sIHVwZGF0ZSBpdCB0byBr ZWVwIHVwcGVyLWxlZnQgY29ybmVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uCgkJCWlm ICghIHRoaXMudXNlVG9wKSAKCQkJCXRoaXMuZWxlbWVudC5zZXRTdHlsZSh7Ym90 dG9tOiAodGhpcy5ib3R0b21PcmcgLWR5KSArICdweCd9KTsKCQl9CgkJLy8gTW92 ZSBjYXNlLCB1cGRhdGUgdG9wL2xlZnQKCQllbHNlIHsKCQkgIHRoaXMucG9pbnRl ciA9IHBvaW50ZXI7CiAgCQkKCQkJaWYgKHRoaXMudXNlTGVmdCkgCgkJCQl0aGlz LmVsZW1lbnQuc2V0U3R5bGUoe2xlZnQ6IHBhcnNlRmxvYXQodGhpcy5lbGVtZW50 LmdldFN0eWxlKCdsZWZ0JykpICsgZHggKyAncHgnfSk7CgkJCWVsc2UgCgkJCQl0 aGlzLmVsZW1lbnQuc2V0U3R5bGUoe3JpZ2h0OiBwYXJzZUZsb2F0KHRoaXMuZWxl bWVudC5nZXRTdHlsZSgncmlnaHQnKSkgLSBkeCArICdweCd9KTsKCQkJCgkJCWlm ICh0aGlzLnVzZVRvcCkgCgkJCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGUoe3RvcDog cGFyc2VGbG9hdCh0aGlzLmVsZW1lbnQuZ2V0U3R5bGUoJ3RvcCcpKSArIGR5ICsg J3B4J30pOwoJCSAgZWxzZSAKCQkJCXRoaXMuZWxlbWVudC5zZXRTdHlsZSh7Ym90 dG9tOiBwYXJzZUZsb2F0KHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnYm90dG9tJykp IC0gZHkgKyAncHgnfSk7CgkJfQoJCWlmICh0aGlzLmllZml4KSAKCQkJdGhpcy5f Zml4SUVPdmVybGFwcGluZygpOyAKCQkJCgkJdGhpcy5fcmVtb3ZlU3RvcmVMb2Nh dGlvbigpOwogICAgRXZlbnQuc3RvcChldmVudCk7Cgl9LAoKCSAvLyBlbmREcmFn IGNhbGxiYWNrCiAJX2VuZERyYWc6IGZ1bmN0aW9uKGV2ZW50KSB7CgkJLy8gUmVt b3ZlIHRlbXBvcmFyeSBkaXYgb3ZlciBpZnJhbWVzCiAJICBXaW5kb3dVdGlsaXRp ZXMuZW5hYmxlU2NyZWVuKCdfX2ludmlzaWJsZV9fJyk7CgkJCgkJaWYgKHRoaXMu ZG9SZXNpemUpCgkJCVdpbmRvd3Mubm90aWZ5KCJvbkVuZFJlc2l6ZSIsIHRoaXMp OwoJCWVsc2UKCQkJV2luZG93cy5ub3RpZnkoIm9uRW5kTW92ZSIsIHRoaXMpOwoJ CQoJCS8vIFJlbGVhc2UgZXZlbnQgb2JzZXJ2aW5nCgkJRXZlbnQuc3RvcE9ic2Vy dmluZyhkb2N1bWVudCwgIm1vdXNldXAiLCB0aGlzLmV2ZW50TW91c2VVcCxmYWxz ZSk7CiAgICBFdmVudC5zdG9wT2JzZXJ2aW5nKGRvY3VtZW50LCAibW91c2Vtb3Zl IiwgdGhpcy5ldmVudE1vdXNlTW92ZSwgZmFsc2UpOwoKCQkvLyBTdG9yZSBuZXcg bG9jYXRpb24vc2l6ZSBpZiBuZWVkIGJlCgkJdGhpcy5fc2F2ZUNvb2tpZSgpCgog ICAgRXZlbnQuc3RvcChldmVudCk7CiAgICAKICAgIC8vIFJlc3RvcmUgc2VsZWN0 aW9uCiAgICBkb2N1bWVudC5ib2R5Lm9uZHJhZyA9IG51bGw7CiAgICBkb2N1bWVu dC5ib2R5Lm9uc2VsZWN0c3RhcnQgPSBudWxsOwogIH0sCgoJX2tleVByZXNzOiBm dW5jdGlvbihldmVudCkgewoJCS8vRGlhbG9nLmNhbmNlbENhbGxiYWNrKCk7Cgl9 LAoJCgkvLyBDcmVhdGVzIEhUTUwgd2luZG93IGNvZGUKCV9jcmVhdGVXaW5kb3c6 IGZ1bmN0aW9uKGlkKSB7CgkgIHZhciBjbGFzc05hbWUgPSB0aGlzLm9wdGlvbnMu Y2xhc3NOYW1lOwoJCXZhciB3aW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk aXYiKTsKCQl3aW4uc2V0QXR0cmlidXRlKCdpZCcsIGlkKTsKCQl3aW4uY2xhc3NO YW1lID0gImRpYWxvZyI7CgoJCXZhciBjb250ZW50OwoJCWlmICh0aGlzLm9wdGlv bnMudXJsKQoJCQljb250ZW50PSAiPGlmcmFtZSBuYW1lPVwiIiArIGlkICsgIl9j b250ZW50XCIgIGlkPVwiIiArIGlkICsgIl9jb250ZW50XCIgc3JjPVwiIiArIHRo aXMub3B0aW9ucy51cmwgKyAiXCI+IDwvaWZyYW1lPiI7CgkJZWxzZQoJCQljb250 ZW50ID0iPGRpdiBpZD1cIiIgKyBpZCArICJfY29udGVudFwiIGNsYXNzPVwiIiAr Y2xhc3NOYW1lICsgIl9jb250ZW50XCI+IDwvZGl2PiI7CgkJCQoJCXZhciBjbG9z ZURpdiA9IHRoaXMub3B0aW9ucy5jbG9zYWJsZSA/ICI8ZGl2IGNsYXNzPSciKyBj bGFzc05hbWUgKyJfY2xvc2UnIGlkPSciKyBpZCArIl9jbG9zZScgb25tb3VzZXVw PSdXaW5kb3dzLmNsb3NlKFwiIisgaWQgKyJcIiknPiA8L2Rpdj4iIDogIiI7CgkJ dmFyIG1pbkRpdiA9IHRoaXMub3B0aW9ucy5taW5pbWl6YWJsZSA/ICI8ZGl2IGNs YXNzPSciKyBjbGFzc05hbWUgKyAiX21pbmltaXplJyBpZD0nIisgaWQgKyJfbWlu aW1pemUnIG9ubW91c2V1cD0nV2luZG93cy5taW5pbWl6ZShcIiIrIGlkICsiXCIp Jz4gPC9kaXY+IiA6ICIiOwoJCXZhciBtYXhEaXYgPSB0aGlzLm9wdGlvbnMubWF4 aW1pemFibGUgPyAiPGRpdiBjbGFzcz0nIisgY2xhc3NOYW1lICsgIl9tYXhpbWl6 ZScgaWQ9JyIrIGlkICsiX21heGltaXplJyBvbm1vdXNldXA9J1dpbmRvd3MubWF4 aW1pemUoXCIiKyBpZCArIlwiKSc+IDwvZGl2PiIgOiAiIjsKCQl2YXIgc2VBdHRy aWJ1dGVzID0gdGhpcy5vcHRpb25zLnJlc2l6YWJsZSA/ICJjbGFzcz0nIiArIGNs YXNzTmFtZSArICJfc2l6ZXInIGlkPSciICsgaWQgKyAiX3NpemVyJyIgOiAiY2xh c3M9JyIgICsgY2xhc3NOYW1lICsgIl9zZSciOwoJCQogICAgd2luLmlubmVySFRN TCA9IGNsb3NlRGl2ICsgbWluRGl2ICsgbWF4RGl2ICsgIlwKICAgICAgPHRhYmxl IGlkPSciKyBpZCArIl9yb3cxJyBjbGFzcz1cInRvcCB0YWJsZV93aW5kb3dcIj5c CiAgICAgICAgPHRyPlwKICAgICAgICAgIDx0ZCBjbGFzcz0nIisgY2xhc3NOYW1l ICsiX253Jz4mbmJzcDs8L3RkPlwKICAgICAgICAgIDx0ZCBjbGFzcz0nIisgY2xh c3NOYW1lICsiX24nPjxkaXYgaWQ9JyIrIGlkICsiX3RvcCcgY2xhc3M9JyIrIGNs YXNzTmFtZSArIl90aXRsZSB0aXRsZV93aW5kb3cnPiIrIHRoaXMub3B0aW9ucy50 aXRsZSArIjwvZGl2PjwvdGQ+XAogICAgICAgICAgPHRkIGNsYXNzPSciKyBjbGFz c05hbWUgKyJfbmUnPiZuYnNwOzwvdGQ+XAogICAgICAgIDwvdHI+XAogICAgICA8 L3RhYmxlPlwKICAgICAgPHRhYmxlIGlkPSciKyBpZCArIl9yb3cyJyBjbGFzcz1c Im1pZCB0YWJsZV93aW5kb3dcIj5cCiAgICAgICAgPHRyPlwKICAgICAgICAgIDx0 ZCBjbGFzcz0nIisgY2xhc3NOYW1lICsiX3cnPjwvdGQ+XAogICAgICAgICAgICA8 dGQgaWQ9JyIrIGlkICsiX3RhYmxlX2NvbnRlbnQnIGNsYXNzPSciKyBjbGFzc05h bWUgKyJfY29udGVudCcgdmFsaWduPSd0b3AnPiIrIGNvbnRlbnQgKyI8L3RkPlwK ICAgICAgICAgIDx0ZCBjbGFzcz0nIisgY2xhc3NOYW1lICsiX2UnPjwvdGQ+XAog ICAgICAgIDwvdHI+XAogICAgICA8L3RhYmxlPlwKICAgICAgICA8dGFibGUgaWQ9 JyIrIGlkICsiX3JvdzMnIGNsYXNzPVwiYm90IHRhYmxlX3dpbmRvd1wiPlwKICAg ICAgICA8dHI+XAogICAgICAgICAgPHRkIGNsYXNzPSciKyBjbGFzc05hbWUgKyJf c3cnPiZuYnNwOzwvdGQ+XAogICAgICAgICAgICA8dGQgY2xhc3M9JyIrIGNsYXNz TmFtZSArIl9zJz48ZGl2IGlkPSciKyBpZCArIl9ib3R0b20nIGNsYXNzPSdzdGF0 dXNfYmFyJz4mbmJzcDs8L2Rpdj48L3RkPlwKICAgICAgICAgICAgPHRkICIgKyBz ZUF0dHJpYnV0ZXMgKyAiPiZuYnNwOzwvdGQ+XAogICAgICAgIDwvdHI+XAogICAg ICA8L3RhYmxlPlwKICAgICI7CiAgICAKCQlFbGVtZW50LmhpZGUod2luKTsKCQl0 aGlzLm9wdGlvbnMucGFyZW50Lmluc2VydEJlZm9yZSh3aW4sIHRoaXMub3B0aW9u cy5wYXJlbnQuZmlyc3RDaGlsZCk7CgkJRXZlbnQub2JzZXJ2ZSgkKGlkICsgIl9j b250ZW50IiksICJsb2FkIiwgdGhpcy5vcHRpb25zLm9ubG9hZCk7CgkJcmV0dXJu IHdpbjsKCX0sCgkKCS8vIFNldHMgd2luZG93IGxvY2F0aW9uCglzZXRMb2NhdGlv bjogZnVuY3Rpb24odG9wLCBsZWZ0KSB7CgkgIGlmICh0b3AgPCAwKQoJICAgIHRv cCA9IDA7CiAgICBpZiAobGVmdCA8IDApCiAgICAgIGxlZnQ9IDAKCQl0aGlzLmVs ZW1lbnQuc2V0U3R5bGUoe3RvcDogdG9wICsgJ3B4J30pOwoJCXRoaXMuZWxlbWVu dC5zZXRTdHlsZSh7bGVmdDogbGVmdCArICdweCd9KTsKCQl0aGlzLnVzZUxlZnQg PSB0cnVlOwoJCXRoaXMudXNlVG9wID0gdHJ1ZTsKCX0sCgkJCgkvLyBHZXRzIHdp bmRvdyBzaXplCglnZXRTaXplOiBmdW5jdGlvbigpIHsKCSAgcmV0dXJuIHt3aWR0 aDogdGhpcy53aWR0aCwgaGVpZ2h0OiB0aGlzLmhlaWdodH07Cgl9LAoJCQoJLy8g U2V0cyB3aW5kb3cgc2l6ZQoJc2V0U2l6ZTogZnVuY3Rpb24od2lkdGgsIGhlaWdo dCkgeyAgICAKCSAgd2lkdGggPSBwYXJzZUZsb2F0KHdpZHRoKTsKCSAgaGVpZ2h0 ID0gcGFyc2VGbG9hdChoZWlnaHQpOwoJICAKCQkvLyBDaGVjayBtaW4gYW5kIG1h eCBzaXplCgkJaWYgKHdpZHRoIDwgdGhpcy5vcHRpb25zLm1pbldpZHRoKQoJCQl3 aWR0aCA9IHRoaXMub3B0aW9ucy5taW5XaWR0aDsKCgkJaWYgKGhlaWdodCA8IHRo aXMub3B0aW9ucy5taW5IZWlnaHQpCgkJCWhlaWdodCA9IHRoaXMub3B0aW9ucy5t aW5IZWlnaHQ7CgkJCQoJCWlmICh0aGlzLm9wdGlvbnMuIG1heEhlaWdodCAmJiBo ZWlnaHQgPiB0aGlzLm9wdGlvbnMuIG1heEhlaWdodCkKCQkJaGVpZ2h0ID0gdGhp cy5vcHRpb25zLiBtYXhIZWlnaHQ7CgoJCWlmICh0aGlzLm9wdGlvbnMuIG1heFdp ZHRoICYmIHdpZHRoID4gdGhpcy5vcHRpb25zLiBtYXhXaWR0aCkKCQkJd2lkdGgg PSB0aGlzLm9wdGlvbnMuIG1heFdpZHRoOwoKICAJdGhpcy53aWR0aCA9IHdpZHRo OwoJCXRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwoJCXRoaXMuZWxlbWVudC5zZXRTdHls ZSh7d2lkdGg6IHdpZHRoICsgdGhpcy53aWR0aFcgKyB0aGlzLndpZHRoRSArICJw eCJ9KQoJCXRoaXMuZWxlbWVudC5zZXRTdHlsZSh7aGVpZ2h0OiBoZWlnaHQgICsg dGhpcy5oZWlnaHROICsgdGhpcy5oZWlnaHRTICsgInB4In0pCgoJCS8vIFVwZGF0 ZSBjb250ZW50IGhlaWdodAoJCXZhciBjb250ZW50ID0gJCh0aGlzLmVsZW1lbnQu aWQgKyAnX2NvbnRlbnQnKQoJCWNvbnRlbnQuc2V0U3R5bGUoe2hlaWdodDogaGVp Z2h0ICArICdweCd9KTsKCQljb250ZW50LnNldFN0eWxlKHt3aWR0aDogd2lkdGgg ICsgJ3B4J30pOwoJfSwKCQoJdXBkYXRlSGVpZ2h0OiBmdW5jdGlvbigpIHsKICAg IHRoaXMuc2V0U2l6ZSh0aGlzLndpZHRoLCB0aGlzLmNvbnRlbnQuc2Nyb2xsSGVp Z2h0KQoJfSwKCQoJdXBkYXRlV2lkdGg6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5z ZXRTaXplKHRoaXMuY29udGVudC5zY3JvbGxXaWR0aCwgdGhpcy5oZWlnaHQpCgl9 LAoJCgkvLyBCcmluZ3Mgd2luZG93IHRvIGZyb250Cgl0b0Zyb250OiBmdW5jdGlv bigpIHsKICAgIHRoaXMuc2V0WkluZGV4KFdpbmRvd3MubWF4WkluZGV4ICsgMjAp OwogICAgV2luZG93cy5ub3RpZnkoIm9uRm9jdXMiLCB0aGlzKTsKCX0sCgkKCS8v IERpc3BsYXlzIHdpbmRvdyBtb2RhbCBzdGF0ZSBvciBub3QKCXNob3c6IGZ1bmN0 aW9uKG1vZGFsKSB7CgkJaWYgKG1vZGFsKSB7CgkJCVdpbmRvd1V0aWxpdGllcy5k aXNhYmxlU2NyZWVuKHRoaXMub3B0aW9ucy5jbGFzc05hbWUsICdvdmVybGF5X21v ZGFsJywgdGhpcy5nZXRJZCgpKTsKCQkJdGhpcy5tb2RhbCA9IHRydWU7CQkJCgkJ CXRoaXMuc2V0WkluZGV4KFdpbmRvd3MubWF4WkluZGV4ICsgMjApOwoJCQlXaW5k b3dzLnVuc2V0T3ZlcmZsb3codGhpcyk7CgkJCUV2ZW50Lm9ic2VydmUoZG9jdW1l bnQsICJrZXlwcmVzcyIsIHRoaXMuZXZlbnRLZXlQcmVzcyk7CSAgICAgIAkKCQl9 CgkJCgkJLy8gVG8gcmVzdG9yZSBvdmVyZmxvdyBpZiBuZWVkIGJlCgkJaWYgKHRo aXMub2xkU3R5bGUpCgkJICB0aGlzLmdldENvbnRlbnQoKS5zZXRTdHlsZSh7b3Zl cmZsb3c6IHRoaXMub2xkU3R5bGV9KTsKCQkJCgkJaWYgKCEgdGhpcy53aWR0aCB8 fCAhdGhpcy5oZWlnaHQpIHsKICAgICAgdmFyIHNpemUgPSBXaW5kb3dVdGlsaXRp ZXMuX2NvbXB1dGVTaXplKHRoaXMuY29udGVudC5pbm5lckhUTUwsIHRoaXMuY29u dGVudC5pZCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDApCiAgCQlpZiAodGhp cy5oZWlnaHQpCiAgCQkgIHRoaXMud2lkdGggPSBzaXplICsgNQoJCSAgZWxzZQoJ CSAgICB0aGlzLmhlaWdodCA9IHNpemUgKyA1CgkJfQoKCQl0aGlzLnNldFNpemUo dGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpOwoJCWlmICh0aGlzLmNlbnRlcmVkKQoJ CSAgdGhpcy5fY2VudGVyKHRoaXMuY2VudGVyVG9wLCB0aGlzLmNlbnRlckxlZnQp OwkJCgkJICAKCQlpZiAodGhpcy5vcHRpb25zLnNob3dFZmZlY3QgIT0gRWxlbWVu dC5zaG93ICYmIHRoaXMub3B0aW9ucy5zaG93RWZmZWN0T3B0aW9ucyApCgkJCXRo aXMub3B0aW9ucy5zaG93RWZmZWN0KHRoaXMuZWxlbWVudCwgdGhpcy5vcHRpb25z LnNob3dFZmZlY3RPcHRpb25zKTsJCgkJZWxzZQoJCQl0aGlzLm9wdGlvbnMuc2hv d0VmZmVjdCh0aGlzLmVsZW1lbnQpOwkKCQkJCiAgICB0aGlzLl9jaGVja0lFT3Zl cmxhcHBpbmcoKTsKICAgIFdpbmRvd3Mubm90aWZ5KCJvblNob3ciLCB0aGlzKTsg ICAgCgl9LAoJCgkvLyBEaXNwbGF5cyB3aW5kb3cgbW9kYWwgc3RhdGUgb3Igbm90 IGF0IHRoZSBjZW50ZXIgb2YgdGhlIHBhZ2UKCXNob3dDZW50ZXI6IGZ1bmN0aW9u KG1vZGFsLCB0b3AsIGxlZnQpIHsKICAgIHRoaXMuY2VudGVyZWQgPSB0cnVlOwog ICAgdGhpcy5jZW50ZXJUb3AgPSB0b3A7CiAgICB0aGlzLmNlbnRlckxlZnQgPSBs ZWZ0OwoKCQl0aGlzLnNob3cobW9kYWwpOwoJfSwKCQoJaXNWaXNpYmxlOiBmdW5j dGlvbigpIHsKCSAgcmV0dXJuIHRoaXMuZWxlbWVudC52aXNpYmxlKCk7Cgl9LAoJ CglfY2VudGVyOiBmdW5jdGlvbih0b3AsIGxlZnQpIHsKCQl2YXIgd2luZG93U2Ny b2xsID0gV2luZG93VXRpbGl0aWVzLmdldFdpbmRvd1Njcm9sbCgpOyAgICAKCQl2 YXIgcGFnZVNpemUgPSBXaW5kb3dVdGlsaXRpZXMuZ2V0UGFnZVNpemUoKTsgICAg CgogICAgaWYgKCF0b3ApCiAgICAgIHRvcCA9IChwYWdlU2l6ZS53aW5kb3dIZWln aHQgLSAodGhpcy5oZWlnaHQgKyB0aGlzLmhlaWdodE4gKyB0aGlzLmhlaWdodFMp KS8yOwogICAgdG9wICs9IHdpbmRvd1Njcm9sbC50b3AKICAgIAogICAgaWYgKCFs ZWZ0KQogICAgICBsZWZ0ID0gKHBhZ2VTaXplLndpbmRvd1dpZHRoIC0gKHRoaXMu d2lkdGggKyB0aGlzLndpZHRoVyArIHRoaXMud2lkdGhFKSkvMjsKICAgIGxlZnQg Kz0gd2luZG93U2Nyb2xsLmxlZnQgCiAgICAKICAgIHRoaXMuc2V0TG9jYXRpb24o dG9wLCBsZWZ0KTsKICAgIHRoaXMudG9Gcm9udCgpOwoJfSwKCQoJX3JlY2VudGVy OiBmdW5jdGlvbihldmVudCkgewoJICBpZiAodGhpcy5tb2RhbCkgewogIAkJdmFy IHBhZ2VTaXplID0gV2luZG93VXRpbGl0aWVzLmdldFBhZ2VTaXplKCk7CiAgCQkv LyBzZXQgaGVpZ2h0IG9mIE92ZXJsYXkgdG8gdGFrZSB1cCB3aG9sZSBwYWdlIGFu ZCBzaG93CiAgCQlpZiAoJCgnb3ZlcmxheV9tb2RhbCcpKSB7CiAgCQkgICQoJ292 ZXJsYXlfbW9kYWwnKS5zdHlsZS5oZWlnaHQgPSAocGFnZVNpemUucGFnZUhlaWdo dCArICdweCcpOwogIAkJICAkKCdvdmVybGF5X21vZGFsJykuc3R5bGUud2lkdGgg PSAocGFnZVNpemUucGFnZVdpZHRoICsgJ3B4Jyk7CiAgICAgIH0JCQogIAkJaWYg KHRoaXMuY2VudGVyZWQpCiAgCQkgIHRoaXMuX2NlbnRlcih0aGlzLmNlbnRlclRv cCwgdGhpcy5jZW50ZXJMZWZ0KTsJCQoJICB9Cgl9LAoJCgkvLyBIaWRlcyB3aW5k b3cKCWhpZGU6IGZ1bmN0aW9uKCkgewoJCWlmICh0aGlzLm1vZGFsKSB7CgkJCVdp bmRvd1V0aWxpdGllcy5lbmFibGVTY3JlZW4oKTsKCQkJV2luZG93cy5yZXNldE92 ZXJmbG93KCk7CgkJCUV2ZW50LnN0b3BPYnNlcnZpbmcoZG9jdW1lbnQsICJrZXlw cmVzcyIsIHRoaXMuZXZlbnRLZXlQcmVzcyk7CQkJCgkJfQoJCS8vIFRvIGF2b2lk IGJ1ZyBvbiBzY3JvbGxpbmcgYmFyCgkgIHRoaXMub2xkU3R5bGUgPSB0aGlzLmdl dENvbnRlbnQoKS5nZXRTdHlsZSgnb3ZlcmZsb3cnKSB8fCAiYXV0byIKCQl0aGlz LmdldENvbnRlbnQoKS5zZXRTdHlsZSh7b3ZlcmZsb3c6ICJoaWRkZW4ifSk7CgoJ CXRoaXMub3B0aW9ucy5oaWRlRWZmZWN0KHRoaXMuZWxlbWVudCwgdGhpcy5vcHRp b25zLmhpZGVFZmZlY3RPcHRpb25zKTsJCgoJIAlpZih0aGlzLmllZml4KSAKCQkJ dGhpcy5pZWZpeC5oaWRlKCk7CgkJV2luZG93cy5ub3RpZnkoIm9uSGlkZSIsIHRo aXMpOwoJfSwKCiAgbWluaW1pemU6IGZ1bmN0aW9uKCkgewogICAgdmFyIHIyID0g JCh0aGlzLmdldElkKCkgKyAiX3JvdzIiKTsKICAgIHZhciBkaCA9IHIyLmdldERp bWVuc2lvbnMoKS5oZWlnaHQ7CiAgICAKICAgIGlmIChyMi52aXNpYmxlKCkpIHsK ICAgICAgdmFyIGggID0gdGhpcy5lbGVtZW50LmdldEhlaWdodCgpIC0gZGgKICAg ICAgcjIuaGlkZSgpCiAgCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGUoe2hlaWdodDog aCArICJweCJ9KQogIAkJaWYgKCEgdGhpcy51c2VUb3ApIHsKICAJCSAgdmFyIGJv dHRvbSA9IHBhcnNlRmxvYXQodGhpcy5lbGVtZW50LmdldFN0eWxlKCdib3R0b20n KSk7CgkJCSAgdGhpcy5lbGVtZW50LnNldFN0eWxlKHtib3R0b206IChib3R0b20g KyBkaCkgKyAncHgnfSk7CgkJICB9CiAgICB9IAogICAgZWxzZSB7CiAgICAgIHZh ciBoICA9IHRoaXMuZWxlbWVudC5nZXRIZWlnaHQoKSArIGRoOwogICAgICB0aGlz LmVsZW1lbnQuc2V0U3R5bGUoe2hlaWdodDogaCArICJweCJ9KQogIAkJaWYgKCEg dGhpcy51c2VUb3ApIHsKICAJCSAgdmFyIGJvdHRvbSA9IHBhcnNlRmxvYXQodGhp cy5lbGVtZW50LmdldFN0eWxlKCdib3R0b20nKSk7CgkJCSAgdGhpcy5lbGVtZW50 LnNldFN0eWxlKHtib3R0b206IChib3R0b20gLSBkaCkgKyAncHgnfSk7CgkJICB9 CiAgICAgIHIyLnNob3coKTsKICAJCQogICAgICB0aGlzLnRvRnJvbnQoKTsKICAg IH0KICAgIFdpbmRvd3Mubm90aWZ5KCJvbk1pbmltaXplIiwgdGhpcyk7CgkJCiAg ICAvLyBTdG9yZSBuZXcgbG9jYXRpb24vc2l6ZSBpZiBuZWVkIGJlCgkJdGhpcy5f c2F2ZUNvb2tpZSgpCiAgfSwKICAKICBtYXhpbWl6ZTogZnVuY3Rpb24oKSB7CiAg ICBpZiAodGhpcy5zdG9yZWRMb2NhdGlvbiAhPSBudWxsKSB7CiAgICAgIHRoaXMu X3Jlc3RvcmVMb2NhdGlvbigpOwogICAgICBpZih0aGlzLmllZml4KSAKICAJCQl0 aGlzLmllZml4LmhpZGUoKTsKICAgIH0KICAgIGVsc2UgewogICAgICB0aGlzLl9z dG9yZUxvY2F0aW9uKCk7CiAgICAgIFdpbmRvd3MudW5zZXRPdmVyZmxvdyh0aGlz KTsKICAgICAgCiAgICAgIHZhciB3aW5kb3dTY3JvbGwgPSBXaW5kb3dVdGlsaXRp ZXMuZ2V0V2luZG93U2Nyb2xsKCk7CiAgCQl2YXIgcGFnZVNpemUgPSBXaW5kb3dV dGlsaXRpZXMuZ2V0UGFnZVNpemUoKTsgICAgCgoJCQl0aGlzLmVsZW1lbnQuc2V0 U3R5bGUodGhpcy51c2VMZWZ0ID8ge2xlZnQ6IHdpbmRvd1Njcm9sbC5sZWZ0fSA6 IHtyaWdodDogd2luZG93U2Nyb2xsLmxlZnR9KTsKICAJCXRoaXMuZWxlbWVudC5z ZXRTdHlsZSh0aGlzLnVzZVRvcCA/IHt0b3A6IHdpbmRvd1Njcm9sbC50b3B9IDog e2JvdHRvbTogd2luZG93U2Nyb2xsLnRvcH0pOwoKICAgICAgdGhpcy5zZXRTaXpl KHBhZ2VTaXplLndpbmRvd1dpZHRoIC0gdGhpcy53aWR0aFcgLSB0aGlzLndpZHRo RSwgcGFnZVNpemUud2luZG93SGVpZ2h0IC0gdGhpcy5oZWlnaHROIC0gdGhpcy5o ZWlnaHRTKQogICAgICB0aGlzLnRvRnJvbnQoKTsKICAgICAgaWYgKHRoaXMuaWVm aXgpIAogIAkJCXRoaXMuX2ZpeElFT3ZlcmxhcHBpbmcoKTsgCiAgICB9CgkJV2lu ZG93cy5ub3RpZnkoIm9uTWF4aW1pemUiLCB0aGlzKTsKCgkJLy8gU3RvcmUgbmV3 IGxvY2F0aW9uL3NpemUgaWYgbmVlZCBiZQoJCXRoaXMuX3NhdmVDb29raWUoKQog IH0sCiAgCiAgaXNNaW5pbWl6ZWQ6IGZ1bmN0aW9uKCkgewogICAgdmFyIHIyID0g JCh0aGlzLmdldElkKCkgKyAiX3JvdzIiKTsKICAgIHJldHVybiAhcjIudmlzaWJs ZSgpOwogIH0sCiAgCiAgaXNNYXhpbWl6ZWQ6IGZ1bmN0aW9uKCkgewogICAgcmV0 dXJuICh0aGlzLnN0b3JlZExvY2F0aW9uICE9IG51bGwpOwogIH0sCiAgCglzZXRP cGFjaXR5OiBmdW5jdGlvbihvcGFjaXR5KSB7CgkJaWYgKEVsZW1lbnQuc2V0T3Bh Y2l0eSkKCQkJRWxlbWVudC5zZXRPcGFjaXR5KHRoaXMuZWxlbWVudCwgb3BhY2l0 eSk7Cgl9LAoJCglzZXRaSW5kZXg6IGZ1bmN0aW9uKHppbmRleCkgewoJCXRoaXMu ZWxlbWVudC5zZXRTdHlsZSh7ekluZGV4OiB6aW5kZXh9KTsKCQlXaW5kb3dzLnVw ZGF0ZVppbmRleCh6aW5kZXgsIHRoaXMpOwoJfSwKCiAgc2V0VGl0bGU6IGZ1bmN0 aW9uKG5ld1RpdGxlKSB7CiAgCWlmICghbmV3VGl0bGUgfHwgbmV3VGl0bGUgPT0g IiIpIAogIAkgIG5ld1RpdGxlID0gIiZuYnNwOyI7CiAgCSAgCiAgCUVsZW1lbnQu dXBkYXRlKHRoaXMuZWxlbWVudC5pZCArICdfdG9wJywgbmV3VGl0bGUpOwogIH0s CgoJc2V0U3RhdHVzQmFyOiBmdW5jdGlvbihlbGVtZW50KSB7CgkJdmFyIHN0YXR1 c0JhciA9ICQodGhpcy5nZXRJZCgpICsgIl9ib3R0b20iKTsKCiAgICBpZiAodHlw ZW9mKGVsZW1lbnQpID09ICJvYmplY3QiKSB7CiAgICAgIGlmICh0aGlzLmJvdHRv bWJhci5maXJzdENoaWxkKQogICAgICAgIHRoaXMuYm90dG9tYmFyLnJlcGxhY2VD aGlsZChlbGVtZW50LCB0aGlzLmJvdHRvbWJhci5maXJzdENoaWxkKTsKICAgICAg ZWxzZQogICAgICAgIHRoaXMuYm90dG9tYmFyLmFwcGVuZENoaWxkKGVsZW1lbnQp OwogICAgfQogICAgZWxzZQoJCSAgdGhpcy5ib3R0b21iYXIuaW5uZXJIVE1MID0g ZWxlbWVudDsKCX0sCgoJX2NoZWNrSUVPdmVybGFwcGluZzogZnVuY3Rpb24oKSB7 CiAgICBpZighdGhpcy5pZWZpeCAmJiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5k ZXhPZignTVNJRScpPjApICYmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2Yo J09wZXJhJyk8MCkgJiYgKHRoaXMuZWxlbWVudC5nZXRTdHlsZSgncG9zaXRpb24n KT09J2Fic29sdXRlJykpIHsKICAgICAgICBuZXcgSW5zZXJ0aW9uLkFmdGVyKHRo aXMuZWxlbWVudC5pZCwgJzxpZnJhbWUgaWQ9IicgKyB0aGlzLmVsZW1lbnQuaWQg KyAnX2llZml4IiAnKyAnc3R5bGU9ImRpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNv bHV0ZTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFs cGhhKG9wYWNpdHk9MCk7IiAnICsgJ3NyYz0iamF2YXNjcmlwdDpmYWxzZTsiIGZy YW1lYm9yZGVyPSIwIiBzY3JvbGxpbmc9Im5vIj48L2lmcmFtZT4nKTsKICAgICAg ICB0aGlzLmllZml4ID0gJCh0aGlzLmVsZW1lbnQuaWQrJ19pZWZpeCcpOwogICAg fQogICAgaWYodGhpcy5pZWZpeCkgCgkJCXNldFRpbWVvdXQodGhpcy5fZml4SUVP dmVybGFwcGluZy5iaW5kKHRoaXMpLCA1MCk7Cgl9LAoKCV9maXhJRU92ZXJsYXBw aW5nOiBmdW5jdGlvbigpIHsKCSAgICBQb3NpdGlvbi5jbG9uZSh0aGlzLmVsZW1l bnQsIHRoaXMuaWVmaXgpOwoJICAgIHRoaXMuaWVmaXguc3R5bGUuekluZGV4ID0g dGhpcy5lbGVtZW50LnN0eWxlLnpJbmRleCAtIDE7CgkgICAgdGhpcy5pZWZpeC5z aG93KCk7Cgl9LAoJCglfZ2V0V2luZG93Qm9yZGVyU2l6ZTogZnVuY3Rpb24oZXZl bnQpIHsKICAgIC8vIEhhY2sgdG8gZ2V0IHJlYWwgd2luZG93IGJvcmRlciBzaXpl ISEKICAgIHZhciBkaXYgPSB0aGlzLl9jcmVhdGVIaWRkZW5EaXYodGhpcy5vcHRp b25zLmNsYXNzTmFtZSArICJfbiIpCgkJdGhpcy5oZWlnaHROID0gRWxlbWVudC5n ZXREaW1lbnNpb25zKGRpdikuaGVpZ2h0OwkJCgkJZGl2LnBhcmVudE5vZGUucmVt b3ZlQ2hpbGQoZGl2KQoKICAgIHZhciBkaXYgPSB0aGlzLl9jcmVhdGVIaWRkZW5E aXYodGhpcy5vcHRpb25zLmNsYXNzTmFtZSArICJfcyIpCgkJdGhpcy5oZWlnaHRT ID0gRWxlbWVudC5nZXREaW1lbnNpb25zKGRpdikuaGVpZ2h0OwkJCgkJZGl2LnBh cmVudE5vZGUucmVtb3ZlQ2hpbGQoZGl2KQoKICAgIHZhciBkaXYgPSB0aGlzLl9j cmVhdGVIaWRkZW5EaXYodGhpcy5vcHRpb25zLmNsYXNzTmFtZSArICJfZSIpCgkJ dGhpcy53aWR0aEUgPSBFbGVtZW50LmdldERpbWVuc2lvbnMoZGl2KS53aWR0aDsJ CQoJCWRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRpdikKCiAgICB2YXIgZGl2 ID0gdGhpcy5fY3JlYXRlSGlkZGVuRGl2KHRoaXMub3B0aW9ucy5jbGFzc05hbWUg KyAiX3ciKQoJCXRoaXMud2lkdGhXID0gRWxlbWVudC5nZXREaW1lbnNpb25zKGRp dikud2lkdGg7CgkJZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZGl2KTsKCQkv LyBTYWZhcmkgc2l6ZSBmaXgKCQlpZiAoL0tvbnF1ZXJvcnxTYWZhcml8S0hUTUwv LnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpCgkJICB0aGlzLnNldFNpemUodGhp cy53aWR0aCwgdGhpcy5oZWlnaHQpOwoJCWlmICh0aGlzLmRvTWF4aW1pemUpCgkJ ICB0aGlzLm1heGltaXplKCk7CgkJaWYgKHRoaXMuZG9NaW5pbWl6ZSkKCQkgIHRo aXMubWluaW1pemUoKTsKICB9LAogCiAgX2NyZWF0ZUhpZGRlbkRpdjogZnVuY3Rp b24oY2xhc3NOYW1lKSB7CiAgICB2YXIgb2JqQm9keSA9IGRvY3VtZW50LmdldEVs ZW1lbnRzQnlUYWdOYW1lKCJib2R5IikuaXRlbSgwKTsKICAgIHZhciB3aW4gPSBk b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCQl3aW4uc2V0QXR0cmlidXRl KCdpZCcsIHRoaXMuZWxlbWVudC5pZCsgIl90bXAiKTsKCQl3aW4uY2xhc3NOYW1l ID0gY2xhc3NOYW1lOwoJCXdpbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnCgkJd2lu LmlubmVySFRNTCA9ICcnCgkJb2JqQm9keS5pbnNlcnRCZWZvcmUod2luLCBvYmpC b2R5LmZpcnN0Q2hpbGQpICAgCgkJcmV0dXJuIHdpbgogIH0sCiAgCglfc3RvcmVM b2NhdGlvbjogZnVuY3Rpb24oKSB7CgkgIGlmICh0aGlzLnN0b3JlZExvY2F0aW9u ID09IG51bGwpIHsKCSAgICB0aGlzLnN0b3JlZExvY2F0aW9uID0ge3VzZVRvcDog dGhpcy51c2VUb3AsIHVzZUxlZnQ6IHRoaXMudXNlTGVmdCwgCgkgICAgICAgICAg ICAgICAgICAgICAgICAgICB0b3A6IHRoaXMuZWxlbWVudC5nZXRTdHlsZSgndG9w JyksIGJvdHRvbTogdGhpcy5lbGVtZW50LmdldFN0eWxlKCdib3R0b20nKSwKCSAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMuZWxlbWVudC5nZXRT dHlsZSgnbGVmdCcpLCByaWdodDogdGhpcy5lbGVtZW50LmdldFN0eWxlKCdyaWdo dCcpLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lk dGgsIGhlaWdodDogdGhpcy5oZWlnaHQgfTsKCSAgfQoJfSwKCQogIF9yZXN0b3Jl TG9jYXRpb246IGZ1bmN0aW9uKCkgewogICAgaWYgKHRoaXMuc3RvcmVkTG9jYXRp b24gIT0gbnVsbCkgewogICAgICB0aGlzLnVzZUxlZnQgPSB0aGlzLnN0b3JlZExv Y2F0aW9uLnVzZUxlZnQ7CiAgICAgIHRoaXMudXNlVG9wID0gdGhpcy5zdG9yZWRM b2NhdGlvbi51c2VUb3A7CiAgICAgIAogICAgICB0aGlzLmVsZW1lbnQuc2V0U3R5 bGUodGhpcy51c2VMZWZ0ID8ge2xlZnQ6IHRoaXMuc3RvcmVkTG9jYXRpb24ubGVm dH0gOiB7cmlnaHQ6IHRoaXMuc3RvcmVkTG9jYXRpb24ucmlnaHR9KTsKICAJCXRo aXMuZWxlbWVudC5zZXRTdHlsZSh0aGlzLnVzZVRvcCA/IHt0b3A6IHRoaXMuc3Rv cmVkTG9jYXRpb24udG9wfSA6IHtib3R0b206IHRoaXMuc3RvcmVkTG9jYXRpb24u Ym90dG9tfSk7CgkJICB0aGlzLnNldFNpemUodGhpcy5zdG9yZWRMb2NhdGlvbi53 aWR0aCwgdGhpcy5zdG9yZWRMb2NhdGlvbi5oZWlnaHQpOwogICAgICAKCQkgIFdp bmRvd3MucmVzZXRPdmVyZmxvdygpOwoJCSAgdGhpcy5fcmVtb3ZlU3RvcmVMb2Nh dGlvbigpOwogICAgfQogIH0sCiAgCiAgX3JlbW92ZVN0b3JlTG9jYXRpb246IGZ1 bmN0aW9uKCkgewogICAgdGhpcy5zdG9yZWRMb2NhdGlvbiA9IG51bGw7CiAgfSwK ICAKICBfc2F2ZUNvb2tpZTogZnVuY3Rpb24oKSB7CiAgICBpZiAodGhpcy5jb29r aWUpIHsKICAJCXZhciB2YWx1ZSA9ICIiOwogIAkJaWYgKHRoaXMudXNlTGVmdCkK ICAJCQl2YWx1ZSArPSAibDoiICsgICh0aGlzLnN0b3JlZExvY2F0aW9uID8gdGhp cy5zdG9yZWRMb2NhdGlvbi5sZWZ0IDogdGhpcy5lbGVtZW50LmdldFN0eWxlKCds ZWZ0JykpCiAgCQllbHNlCiAgCQkJdmFsdWUgKz0gInI6IiArICh0aGlzLnN0b3Jl ZExvY2F0aW9uID8gdGhpcy5zdG9yZWRMb2NhdGlvbi5yaWdodCA6IHRoaXMuZWxl bWVudC5nZXRTdHlsZSgncmlnaHQnKSkKICAJCWlmICh0aGlzLnVzZVRvcCkKICAJ CQl2YWx1ZSArPSAiLHQ6IiArICh0aGlzLnN0b3JlZExvY2F0aW9uID8gdGhpcy5z dG9yZWRMb2NhdGlvbi50b3AgOiB0aGlzLmVsZW1lbnQuZ2V0U3R5bGUoJ3RvcCcp KQogIAkJZWxzZQogIAkJCXZhbHVlICs9ICIsYjoiICsgKHRoaXMuc3RvcmVkTG9j YXRpb24gPyB0aGlzLnN0b3JlZExvY2F0aW9uLmJvdHRvbSA6dGhpcy5lbGVtZW50 LmdldFN0eWxlKCdib3R0b20nKSkKICAJCQkKICAJCXZhbHVlICs9ICIsIiArICh0 aGlzLnN0b3JlZExvY2F0aW9uID8gdGhpcy5zdG9yZWRMb2NhdGlvbi53aWR0aCA6 IHRoaXMud2lkdGgpOwogIAkJdmFsdWUgKz0gIiwiICsgKHRoaXMuc3RvcmVkTG9j YXRpb24gPyB0aGlzLnN0b3JlZExvY2F0aW9uLmhlaWdodCA6IHRoaXMuaGVpZ2h0 KTsKICAJCXZhbHVlICs9ICIsIiArIHRoaXMuaXNNaW5pbWl6ZWQoKTsKICAJCXZh bHVlICs9ICIsIiArIHRoaXMuaXNNYXhpbWl6ZWQoKTsKICAJCVdpbmRvd1V0aWxp dGllcy5zZXRDb29raWUodmFsdWUsIHRoaXMuY29va2llKQogICAgfQogIH0KfTsK Ci8vIFdpbmRvd3MgY29udGFpbmVycywgcmVnaXN0ZXIgYWxsIHBhZ2Ugd2luZG93 cwp2YXIgV2luZG93cyA9IHsKICB3aW5kb3dzOiBbXSwKICBvYnNlcnZlcnM6IFtd LAogIGZvY3VzZWRXaW5kb3c6IG51bGwsCiAgbWF4WkluZGV4OiAwLAoKICBhZGRP YnNlcnZlcjogZnVuY3Rpb24ob2JzZXJ2ZXIpIHsKICAgIHRoaXMucmVtb3ZlT2Jz ZXJ2ZXIob2JzZXJ2ZXIpOwogICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZl cik7CiAgfSwKICAKICByZW1vdmVPYnNlcnZlcjogZnVuY3Rpb24ob2JzZXJ2ZXIp IHsgIAogICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5yZWplY3Qo IGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG89PW9ic2VydmVyIH0pOwogIH0sCiAgCiAg bm90aWZ5OiBmdW5jdGlvbihldmVudE5hbWUsIHdpbikgeyAgLy8gIG9uU3RhcnRS ZXNpemUoKSwgb25FbmRSZXNpemUoKSwgb25TdGFydE1vdmUoKSwgb25FbmRNb3Zl KCksIG9uQ2xvc2UoKSwgb25EZXN0cm95KCksIG9uTWluaW1pemUoKSwgb25NYXhp bWl6ZSgpLCBvbkhpZGUoKSwgb25TaG93KCksIG9uRm9jdXMoKQogICAgdGhpcy5v YnNlcnZlcnMuZWFjaCggZnVuY3Rpb24obykge2lmKG9bZXZlbnROYW1lXSkgb1tl dmVudE5hbWVdKGV2ZW50TmFtZSwgd2luKTt9KTsKICB9LAoKICAvLyBHZXRzIHdp bmRvdyBmcm9tIGl0cyBpZAogIGdldFdpbmRvdzogZnVuY3Rpb24oaWQpIHsKCSAg cmV0dXJuIHRoaXMud2luZG93cy5kZXRlY3QoZnVuY3Rpb24oZCkgeyByZXR1cm4g ZC5nZXRJZCgpID09aWQgfSk7CiAgfSwKCiAgLy8gR2V0cyB0aGUgbGFzdCBmb2N1 c2VkIHdpbmRvdwogIGdldEZvY3VzZWRXaW5kb3c6IGZ1bmN0aW9uKCkgewoJICBy ZXR1cm4gdGhpcy5mb2N1c2VkV2luZG93OwogIH0sCgogIC8vIFJlZ2lzdGVycyBh IG5ldyB3aW5kb3cgKGNhbGxlZCBieSBXaW5kb3dzIGNvbnN0cnVjdG9yKQogIHJl Z2lzdGVyOiBmdW5jdGlvbih3aW4pIHsKICAgIHRoaXMud2luZG93cy5wdXNoKHdp bik7CiAgfSwKICAKICAvLyBVbnJlZ2lzdGVycyBhIHdpbmRvdyAoY2FsbGVkIGJ5 IFdpbmRvd3MgZGVzdHJ1Y3RvcikKICB1bnJlZ2lzdGVyOiBmdW5jdGlvbih3aW4p IHsKICAgIHRoaXMud2luZG93cyA9IHRoaXMud2luZG93cy5yZWplY3QoZnVuY3Rp b24oZCkgeyByZXR1cm4gZD09d2luIH0pOwogIH0sIAoKICAvLyBDbG9zZXMgYSB3 aW5kb3cgd2l0aCBpdHMgaWQKICBjbG9zZTogZnVuY3Rpb24oaWQpIHsKICAJdmFy IHdpbiA9IHRoaXMuZ2V0V2luZG93KGlkKTsKICAJLy8gQXNrcyBkZWxlZ2F0ZSBp ZiBleGlzdHMKICAgIGlmICh3aW4pIHsKCSAgCWlmICh3aW4uZ2V0RGVsZWdhdGUo KSAmJiAhIHdpbi5nZXREZWxlZ2F0ZSgpLmNhbkNsb3NlKHdpbikpIAoJICAJCXJl dHVybjsKCSAgICAgIGlmICgkKGlkICsgIl9jbG9zZSIpKQoJICAgICAgICAkKGlk ICsgIl9jbG9zZSIpLm9uY2xpY2sgPSBudWxsOwoJICAgICAgaWYgKCQoaWQgKyAi X21pbmltaXplIikpCgkgICAgICAgICQoaWQgKyAiX21pbmltaXplIikub25jbGlj ayA9IG51bGw7CSAgICAgICAgCgkgICAgICBpZiAoJChpZCArICJfbWF4aW1pemUi KSkKCSAgICAgICAgJChpZCArICJfbWF4aW1pemUiKS5vbmNsaWNrID0gbnVsbDsJ ICAgICAgCgkgICAgICAKICAJCQl0aGlzLm5vdGlmeSgib25DbG9zZSIsIHdpbik7 CiAgCQkJd2luLmhpZGUoKTsKICAJfQogIH0sCiAgCiAgLy8gQ2xvc2VzIGFsbCB3 aW5kb3dzCiAgY2xvc2VBbGw6IGZ1bmN0aW9uKCkgeyAgCiAgICB0aGlzLndpbmRv d3MuZWFjaCggZnVuY3Rpb24odykge1dpbmRvd3MuY2xvc2Uody5nZXRJZCgpKX0g KTsKICB9LAogIAogIC8vIE1pbmltaXplcyBhIHdpbmRvdyB3aXRoIGl0cyBpZAog IG1pbmltaXplOiBmdW5jdGlvbihpZCkgewogIAl2YXIgd2luID0gdGhpcy5nZXRX aW5kb3coaWQpCiAgCWlmICh3aW4pCiAgCSAgd2luLm1pbmltaXplKCk7CiAgfSwK ICAKICAvLyBNYXhpbWl6ZXMgYSB3aW5kb3cgd2l0aCBpdHMgaWQKICBtYXhpbWl6 ZTogZnVuY3Rpb24oaWQpIHsKICAJdmFyIHdpbiA9IHRoaXMuZ2V0V2luZG93KGlk KQogIAlpZiAod2luKQogIAkgIHdpbi5tYXhpbWl6ZSgpOwogIH0sCiAgCiAgdW5z ZXRPdmVyZmxvdzogZnVuY3Rpb24oZXhjZXB0KSB7CQkKICAJdGhpcy53aW5kb3dz LmVhY2goZnVuY3Rpb24oZCkgeyBkLm9sZE92ZXJmbG93ID0gZC5nZXRDb250ZW50 KCkuZ2V0U3R5bGUoIm92ZXJmbG93IikgfHwgImF1dG8iIDsgZC5nZXRDb250ZW50 KCkuc2V0U3R5bGUoe292ZXJmbG93OiAiaGlkZGVuIn0pIH0pOwogIAlpZiAoZXhj ZXB0ICYmIGV4Y2VwdC5vbGRPdmVyZmxvdykKICAJCWV4Y2VwdC5nZXRDb250ZW50 KCkuc2V0U3R5bGUoe292ZXJmbG93OiBleGNlcHQub2xkT3ZlcmZsb3d9KTsKICB9 LAoKICByZXNldE92ZXJmbG93OiBmdW5jdGlvbigpIHsKCSAgdGhpcy53aW5kb3dz LmVhY2goZnVuY3Rpb24oZCkgeyBpZiAoZC5vbGRPdmVyZmxvdykgZC5nZXRDb250 ZW50KCkuc2V0U3R5bGUoe292ZXJmbG93OiBkLm9sZE92ZXJmbG93fSkgfSk7CiAg fSwKCiAgdXBkYXRlWmluZGV4OiBmdW5jdGlvbih6aW5kZXgsIHdpbikgewogIAlp ZiAoemluZGV4ID4gdGhpcy5tYXhaSW5kZXgpCiAgCQl0aGlzLm1heFpJbmRleCA9 IHppbmRleDsKICAgIHRoaXMuZm9jdXNlZFdpbmRvdyA9IHdpbjsKICB9Cn07Cgp2 YXIgRGlhbG9nID0gewogIGRpYWxvZ0lkOiBudWxsLAogCXdpbjogbnVsbCwKICBv bkNvbXBsZXRlRnVuYzogbnVsbCwKICBjYWxsRnVuYzogbnVsbCwgCiAgcGFyYW1l dGVyczogbnVsbCwgCiAgICAKCWNvbmZpcm06IGZ1bmN0aW9uKGNvbnRlbnQsIHBh cmFtZXRlcnMpIHsKCSAgLy8gR2V0IEFqYXggcmV0dXJuIGJlZm9yZQoJICBpZiAo dHlwZW9mIGNvbnRlbnQgIT0gInN0cmluZyIpIHsKCSAgICBEaWFsb2cuX3J1bkFq YXhSZXF1ZXN0KGNvbnRlbnQsIHBhcmFtZXRlcnMsIERpYWxvZy5jb25maXJtKTsK CSAgICByZXR1cm4gCgkgIH0KCSAgCgkgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJz IHx8IHt9OwoJCXZhciBva0xhYmVsID0gcGFyYW1ldGVycy5va0xhYmVsID8gcGFy YW1ldGVycy5va0xhYmVsIDogIk9rIjsKCQl2YXIgY2FuY2VsTGFiZWwgPSBwYXJh bWV0ZXJzLmNhbmNlbExhYmVsID8gcGFyYW1ldGVycy5jYW5jZWxMYWJlbCA6ICJD YW5jZWwiOwoKCQl2YXIgd2luZG93UGFyYW0gPSBwYXJhbWV0ZXJzLndpbmRvd1Bh cmFtZXRlcnMgfHwge307CgkJd2luZG93UGFyYW0uY2xhc3NOYW1lID0gd2luZG93 UGFyYW0uY2xhc3NOYW1lIHx8ICJhbGVydCI7CgogICAgb2tCdXR0b25DbGFzcyA9 ICJjbGFzcyA9JyIgKyAocGFyYW1ldGVycy5idXR0b25DbGFzcyA/IHBhcmFtZXRl cnMuYnV0dG9uQ2xhc3MgKyAiICIgOiAiIikgKyAiIG9rX2J1dHRvbiciIAogICAg Y2FuY2VsQnV0dG9uQ2xhc3MgPSAiY2xhc3MgPSciICsgKHBhcmFtZXRlcnMuYnV0 dG9uQ2xhc3MgPyBwYXJhbWV0ZXJzLmJ1dHRvbkNsYXNzICsgIiAiIDogIiIpICsg IiBjYW5jZWxfYnV0dG9uJyIgCgkJdmFyIGNvbnRlbnQgPSAiXAoJCQk8ZGl2IGNs YXNzPSciICsgd2luZG93UGFyYW0uY2xhc3NOYW1lICsgIl9tZXNzYWdlJz4iICsg Y29udGVudCAgKyAiPC9kaXY+XAoJCQkJPGRpdiBjbGFzcz0nIiArIHdpbmRvd1Bh cmFtLmNsYXNzTmFtZSArICJfYnV0dG9ucyc+XAoJCQkJCTxpbnB1dCB0eXBlPSdi dXR0b24nIHZhbHVlPSciICsgb2tMYWJlbCArICInIG9uY2xpY2s9J0RpYWxvZy5v a0NhbGxiYWNrKCknIiArIG9rQnV0dG9uQ2xhc3MgKyAiLz5cCgkJCQkJPGlucHV0 IHR5cGU9J2J1dHRvbicgdmFsdWU9JyIgKyBjYW5jZWxMYWJlbCArICInIG9uY2xp Y2s9J0RpYWxvZy5jYW5jZWxDYWxsYmFjaygpJyAiICsgY2FuY2VsQnV0dG9uQ2xh c3MgKyAiLz5cCgkJCQk8L2Rpdj5cCgkJIjsKCSAgdGhpcy5fb3BlbkRpYWxvZyhj b250ZW50LCBwYXJhbWV0ZXJzKQoJICByZXR1cm4gdGhpcy53aW4KCX0sCgkKCWFs ZXJ0OiBmdW5jdGlvbihjb250ZW50LCBwYXJhbWV0ZXJzKSB7CgkgIC8vIEdldCBB amF4IHJldHVybiBiZWZvcmUKCSAgaWYgKHR5cGVvZiBjb250ZW50ICE9ICJzdHJp bmciKSB7CgkgICAgRGlhbG9nLl9ydW5BamF4UmVxdWVzdChjb250ZW50LCBwYXJh bWV0ZXJzLCBEaWFsb2cuYWxlcnQpOwoJICAgIHJldHVybiAKCSAgfQoJICAKCSAg cGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwge307CgkJdmFyIG9rTGFiZWwgPSBw YXJhbWV0ZXJzLm9rTGFiZWwgPyBwYXJhbWV0ZXJzLm9rTGFiZWwgOiAiT2siOwoK CQl2YXIgd2luZG93UGFyYW0gPSBwYXJhbWV0ZXJzLndpbmRvd1BhcmFtZXRlcnMg fHwge307CgkJd2luZG93UGFyYW0uY2xhc3NOYW1lID0gd2luZG93UGFyYW0uY2xh c3NOYW1lIHx8ICJhbGVydCI7CgogICAgb2tCdXR0b25DbGFzcyA9ICJjbGFzcyA9 JyIgKyAocGFyYW1ldGVycy5idXR0b25DbGFzcyA/IHBhcmFtZXRlcnMuYnV0dG9u Q2xhc3MgKyAiICIgOiAiIikgKyAiIG9rX2J1dHRvbiciIAoJCXZhciBjb250ZW50 ID0gIlwKCQkJPGRpdiBjbGFzcz0nIiArIHdpbmRvd1BhcmFtLmNsYXNzTmFtZSAr ICJfbWVzc2FnZSc+IiArIGNvbnRlbnQgICsgIjwvZGl2PlwKCQkJCTxkaXYgY2xh c3M9JyIgKyB3aW5kb3dQYXJhbS5jbGFzc05hbWUgKyAiX2J1dHRvbnMnPlwKCQkJ CQk8aW5wdXQgdHlwZT0nYnV0dG9uJyB2YWx1ZT0nIiArIG9rTGFiZWwgKyAiJyBv bmNsaWNrPSdEaWFsb2cub2tDYWxsYmFjaygpJyIgKyBva0J1dHRvbkNsYXNzICsg Ii8+XAoJCQkJPC9kaXY+IjsKCQlyZXR1cm4gdGhpcy5fb3BlbkRpYWxvZyhjb250 ZW50LCBwYXJhbWV0ZXJzKQoJfSwKCQoJaW5mbzogZnVuY3Rpb24oY29udGVudCwg cGFyYW1ldGVycykgeyAgIAoJICAvLyBHZXQgQWpheCByZXR1cm4gYmVmb3JlCgkg IGlmICh0eXBlb2YgY29udGVudCAhPSAic3RyaW5nIikgewoJICAgIERpYWxvZy5f cnVuQWpheFJlcXVlc3QoY29udGVudCwgcGFyYW1ldGVycywgRGlhbG9nLmluZm8p OwoJICAgIHJldHVybiAKCSAgfQoJICAgCgkgIHBhcmFtZXRlcnMgPSBwYXJhbWV0 ZXJzIHx8IHt9OwoJICBwYXJhbWV0ZXJzLndpbmRvd1BhcmFtZXRlcnMgPSBwYXJh bWV0ZXJzLndpbmRvd1BhcmFtZXRlcnMgfHwge307CgkgIAoJCXZhciBjbGFzc05h bWUgPSBwYXJhbWV0ZXJzLndpbmRvd1BhcmFtZXRlcnMuY2xhc3NOYW1lIHx8ICJh bGVydCI7CgoJCXZhciBjb250ZW50ID0gIjxkaXYgaWQ9J21vZGFsX2RpYWxvZ19t ZXNzYWdlJyBjbGFzcz0nIiArIGNsYXNzTmFtZSArICJfbWVzc2FnZSc+IiArIGNv bnRlbnQgICsgIjwvZGl2PiI7CgkJaWYgKHBhcmFtZXRlcnMuc2hvd1Byb2dyZXNz KQoJCSAgY29udGVudCArPSAiPGRpdiBpZD0nbW9kYWxfZGlhbG9nX3Byb2dyZXNz JyBjbGFzcz0nIiArIGNsYXNzTmFtZSArICJfcHJvZ3Jlc3MnPgk8L2Rpdj4iOwoK CQlwYXJhbWV0ZXJzLndpbmRvd1BhcmFtZXRlcnMub2sgPSBudWxsOwoJCXBhcmFt ZXRlcnMud2luZG93UGFyYW1ldGVycy5jYW5jZWwgPSBudWxsOwogICAgcGFyYW1l dGVycy53aW5kb3dQYXJhbWV0ZXJzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKCQkK CQlyZXR1cm4gdGhpcy5fb3BlbkRpYWxvZyhjb250ZW50LCBwYXJhbWV0ZXJzKQoJ fSwKCQoJc2V0SW5mb01lc3NhZ2U6IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKCQkkKCdt b2RhbF9kaWFsb2dfbWVzc2FnZScpLnVwZGF0ZShtZXNzYWdlKTsKCX0sCgkKCWNs b3NlSW5mbzogZnVuY3Rpb24oKSB7CgkJV2luZG93cy5jbG9zZSh0aGlzLmRpYWxv Z0lkKTsKCX0sCgkKCV9vcGVuRGlhbG9nOiBmdW5jdGlvbihjb250ZW50LCBwYXJh bWV0ZXJzKSB7CgkJLy8gcmVtb3ZlIG9sZCBkaWFsb2cKCQlpZiAodGhpcy53aW4p IAoJCQl0aGlzLndpbi5kZXN0cm95KCk7CgogICAgaWYgKCEgcGFyYW1ldGVycy53 aW5kb3dQYXJhbWV0ZXJzLmhlaWdodCAmJiAhIHBhcmFtZXRlcnMud2luZG93UGFy YW1ldGVycy53aWR0aCkgewogICAgICBwYXJhbWV0ZXJzLndpbmRvd1BhcmFtZXRl cnMud2lkdGggPSBXaW5kb3dVdGlsaXRpZXMuZ2V0UGFnZVNpemUoKS5wYWdlV2lk dGggLyAyOwogICAgfQogICAgdGhpcy5kaWFsb2dJZCA9IHBhcmFtZXRlcnMuaWQg PyBwYXJhbWV0ZXJzLmlkIDogJ21vZGFsX2RpYWxvZycKCiAgICAvLyBjb21wdXRl IGhlaWdodCBvciB3aWR0aCBpZiBuZWVkIGJlCiAgICBpZiAoISBwYXJhbWV0ZXJz LndpbmRvd1BhcmFtZXRlcnMuaGVpZ2h0IHx8ICEgcGFyYW1ldGVycy53aW5kb3dQ YXJhbWV0ZXJzLndpZHRoKSB7CiAgICAgIHZhciBzaXplID0gV2luZG93VXRpbGl0 aWVzLl9jb21wdXRlU2l6ZShjb250ZW50LCB0aGlzLmRpYWxvZ0lkLCBwYXJhbWV0 ZXJzLndpbmRvd1BhcmFtZXRlcnMud2lkdGgsIHBhcmFtZXRlcnMud2luZG93UGFy YW1ldGVycy5oZWlnaHQpCiAgCQlpZiAocGFyYW1ldGVycy53aW5kb3dQYXJhbWV0 ZXJzLmhlaWdodCkKICAJCSAgcGFyYW1ldGVycy53aW5kb3dQYXJhbWV0ZXJzLndp ZHRoID0gc2l6ZSArIDUKCQkgIGVsc2UKCQkgICAgcGFyYW1ldGVycy53aW5kb3dQ YXJhbWV0ZXJzLmhlaWdodCA9IHNpemUgKyA1CiAgICB9CgkJdmFyIHdpbmRvd1Bh cmFtID0gcGFyYW1ldGVycyAmJiBwYXJhbWV0ZXJzLndpbmRvd1BhcmFtZXRlcnMg PyBwYXJhbWV0ZXJzLndpbmRvd1BhcmFtZXRlcnMgOiB7fTsKCQl3aW5kb3dQYXJh bS5yZXNpemFibGUgPSB3aW5kb3dQYXJhbS5yZXNpemFibGUgfHwgZmFsc2U7CgkJ CgkJd2luZG93UGFyYW0uZWZmZWN0T3B0aW9ucyA9IHdpbmRvd1BhcmFtLmVmZmVj dE9wdGlvbnMgfHwge2R1cmF0aW9uOiAxfTsKICAgIHdpbmRvd1BhcmFtLm1pbmlt aXphYmxlID0gZmFsc2U7CiAgICB3aW5kb3dQYXJhbS5tYXhpbWl6YWJsZSA9IGZh bHNlOwogICAgd2luZG93UGFyYW0uY2xvc2FibGUgPSBmYWxzZTsKCQl0aGlzLndp biA9IG5ldyBXaW5kb3codGhpcy5kaWFsb2dJZCwgd2luZG93UGFyYW0pOwoJCXRo aXMud2luLmdldENvbnRlbnQoKS5pbm5lckhUTUwgPSBjb250ZW50OwogIAl0aGlz Lndpbi5zaG93Q2VudGVyKHRydWUsIHBhcmFtZXRlcnMudG9wLCBwYXJhbWV0ZXJz LmxlZnQpOwkKCQkgIAoJCXRoaXMud2luLmNhbmNlbENhbGxiYWNrID0gcGFyYW1l dGVycy5jYW5jZWw7CgkJdGhpcy53aW4ub2tDYWxsYmFjayA9IHBhcmFtZXRlcnMu b2s7CgkJCgkJcmV0dXJuIHRoaXMud2luOwkJCgl9LAoJCglfZ2V0QWpheENvbnRl bnQ6IGZ1bmN0aW9uKG9yaWdpbmFsUmVxdWVzdCkgIHsKICAgICAgRGlhbG9nLmNh bGxGdW5jKG9yaWdpbmFsUmVxdWVzdC5yZXNwb25zZVRleHQsIERpYWxvZy5wYXJh bWV0ZXJzKQogIH0sCiAgCiAgX3J1bkFqYXhSZXF1ZXN0OiBmdW5jdGlvbihtZXNz YWdlLCBwYXJhbWV0ZXJzLCBjYWxsRnVuYykgewogICAgaWYgKG1lc3NhZ2Uub3B0 aW9ucyA9PSBudWxsKQoJICAgIG1lc3NhZ2Uub3B0aW9ucyA9e30gIAoJICBEaWFs b2cub25Db21wbGV0ZUZ1bmMgPSBtZXNzYWdlLm9wdGlvbnMub25Db21wbGV0ZTsK ICAgIERpYWxvZy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsKICAgIERpYWxvZy5j YWxsRnVuYyA9IGNhbGxGdW5jOwogICAgCgkgIG1lc3NhZ2Uub3B0aW9ucy5vbkNv bXBsZXRlID0gRGlhbG9nLl9nZXRBamF4Q29udGVudDsKICAgIG5ldyBBamF4LlJl cXVlc3QobWVzc2FnZS51cmwsIG1lc3NhZ2Uub3B0aW9ucyk7CiAgfSwKICAKCW9r Q2FsbGJhY2s6IGZ1bmN0aW9uKCkgewoJCWlmICghdGhpcy53aW4ub2tDYWxsYmFj ayB8fCB0aGlzLndpbi5va0NhbGxiYWNrKHRoaXMud2luKSkKCSAgICB0aGlzLndp bi5oaWRlKCk7Cgl9LAoKCWNhbmNlbENhbGxiYWNrOiBmdW5jdGlvbigpIHsKCQl0 aGlzLndpbi5oaWRlKCk7CgkJaWYgKHRoaXMud2luLmNhbmNlbENhbGxiYWNrKQoJ CQl0aGlzLndpbi5jYW5jZWxDYWxsYmFjayh0aGlzLndpbik7Cgl9Cn0KLyoKCUJh c2VkIG9uIExpZ2h0Ym94IEpTOiBGdWxsc2l6ZSBJbWFnZSBPdmVybGF5cyAKCWJ5 IExva2VzaCBEaGFrYXIgLSBodHRwOi8vd3d3Lmh1ZGRsZXRvZ2V0aGVyLmNvbQoK CUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgc2NyaXB0LCB2aXNpdDoKCWh0 dHA6Ly9odWRkbGV0b2dldGhlci5jb20vcHJvamVjdHMvbGlnaHRib3gvCgoJTGlj ZW5zZWQgdW5kZXIgdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gMi41 IExpY2Vuc2UgLSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9i eS8yLjUvCgkoYmFzaWNhbGx5LCBkbyBhbnl0aGluZyB5b3Ugd2FudCwganVzdCBs ZWF2ZSBteSBuYW1lIGFuZCBsaW5rKQoqLwoKdmFyIGlzSUUgPSBuYXZpZ2F0b3Iu YXBwVmVyc2lvbi5tYXRjaCgvTVNJRS8pID09ICJNU0lFIjsKCnZhciBXaW5kb3dV dGlsaXRpZXMgPSB7CiAgLy8gRnJvbSBzY3JpcHQuYWN1bG8udXMKICBnZXRXaW5k b3dTY3JvbGw6IGZ1bmN0aW9uKCkgewogICAgdmFyIHcgPSB3aW5kb3c7CiAgICAg IHZhciBULCBMLCBXLCBIOwogICAgICB3aXRoICh3LmRvY3VtZW50KSB7CiAgICAg ICAgaWYgKHcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50RWxl bWVudC5zY3JvbGxUb3ApIHsKICAgICAgICAgIFQgPSBkb2N1bWVudEVsZW1lbnQu c2Nyb2xsVG9wOwogICAgICAgICAgTCA9IGRvY3VtZW50RWxlbWVudC5zY3JvbGxM ZWZ0OwogICAgICAgIH0gZWxzZSBpZiAody5kb2N1bWVudC5ib2R5KSB7CiAgICAg ICAgICBUID0gYm9keS5zY3JvbGxUb3A7CiAgICAgICAgICBMID0gYm9keS5zY3Jv bGxMZWZ0OwogICAgICAgIH0KICAgICAgICBpZiAody5pbm5lcldpZHRoKSB7CiAg ICAgICAgICBXID0gdy5pbm5lcldpZHRoOwogICAgICAgICAgSCA9IHcuaW5uZXJI ZWlnaHQ7CiAgICAgICAgfSBlbHNlIGlmICh3LmRvY3VtZW50LmRvY3VtZW50RWxl bWVudCAmJiBkb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpIHsKICAgICAgICAg IFcgPSBkb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7CiAgICAgICAgICBIID0g ZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsKICAgICAgICB9IGVsc2Ugewog ICAgICAgICAgVyA9IGJvZHkub2Zmc2V0V2lkdGg7CiAgICAgICAgICBIID0gYm9k eS5vZmZzZXRIZWlnaHQKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsg dG9wOiBULCBsZWZ0OiBMLCB3aWR0aDogVywgaGVpZ2h0OiBIIH07CiAgICAKICB9 LCAKICAvLwogIC8vIGdldFBhZ2VTaXplKCkKICAvLyBSZXR1cm5zIGFycmF5IHdp dGggcGFnZSB3aWR0aCwgaGVpZ2h0IGFuZCB3aW5kb3cgd2lkdGgsIGhlaWdodAog IC8vIENvcmUgY29kZSBmcm9tIC0gcXVpcmtzbW9kZS5vcmcKICAvLyBFZGl0IGZv ciBGaXJlZm94IGJ5IHBIYWV6CiAgLy8KICBnZXRQYWdlU2l6ZTogZnVuY3Rpb24o KXsKICAJdmFyIHhTY3JvbGwsIHlTY3JvbGw7CgogIAlpZiAod2luZG93LmlubmVy SGVpZ2h0ICYmIHdpbmRvdy5zY3JvbGxNYXhZKSB7CQogIAkJeFNjcm9sbCA9IGRv Y3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg7CiAgCQl5U2Nyb2xsID0gd2luZG93Lmlu bmVySGVpZ2h0ICsgd2luZG93LnNjcm9sbE1heFk7CiAgCX0gZWxzZSBpZiAoZG9j dW1lbnQuYm9keS5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5ib2R5Lm9mZnNldEhl aWdodCl7IC8vIGFsbCBidXQgRXhwbG9yZXIgTWFjCiAgCQl4U2Nyb2xsID0gZG9j dW1lbnQuYm9keS5zY3JvbGxXaWR0aDsKICAJCXlTY3JvbGwgPSBkb2N1bWVudC5i b2R5LnNjcm9sbEhlaWdodDsKICAJfSBlbHNlIHsgLy8gRXhwbG9yZXIgTWFjLi4u d291bGQgYWxzbyB3b3JrIGluIEV4cGxvcmVyIDYgU3RyaWN0LCBNb3ppbGxhIGFu ZCBTYWZhcmkKICAJCXhTY3JvbGwgPSBkb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRo OwogIAkJeVNjcm9sbCA9IGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0OwogIAl9 CgogIAl2YXIgd2luZG93V2lkdGgsIHdpbmRvd0hlaWdodDsKCiAgCWlmIChzZWxm LmlubmVySGVpZ2h0KSB7CS8vIGFsbCBleGNlcHQgRXhwbG9yZXIKICAJCXdpbmRv d1dpZHRoID0gc2VsZi5pbm5lcldpZHRoOwogIAkJd2luZG93SGVpZ2h0ID0gc2Vs Zi5pbm5lckhlaWdodDsKICAJfSBlbHNlIGlmIChkb2N1bWVudC5kb2N1bWVudEVs ZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkg eyAvLyBFeHBsb3JlciA2IFN0cmljdCBNb2RlCiAgCQl3aW5kb3dXaWR0aCA9IGRv Y3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsKICAJCXdpbmRvd0hl aWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7CiAg CX0gZWxzZSBpZiAoZG9jdW1lbnQuYm9keSkgeyAvLyBvdGhlciBFeHBsb3JlcnMK ICAJCXdpbmRvd1dpZHRoID0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDsKICAJ CXdpbmRvd0hlaWdodCA9IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0OwogIAl9 CQogIAl2YXIgcGFnZUhlaWdodCwgcGFnZVdpZHRoOwoKICAJLy8gZm9yIHNtYWxs IHBhZ2VzIHdpdGggdG90YWwgaGVpZ2h0IGxlc3MgdGhlbiBoZWlnaHQgb2YgdGhl IHZpZXdwb3J0CiAgCWlmKHlTY3JvbGwgPCB3aW5kb3dIZWlnaHQpewogIAkJcGFn ZUhlaWdodCA9IHdpbmRvd0hlaWdodDsKICAJfSBlbHNlIHsgCiAgCQlwYWdlSGVp Z2h0ID0geVNjcm9sbDsKICAJfQoKICAJLy8gZm9yIHNtYWxsIHBhZ2VzIHdpdGgg dG90YWwgd2lkdGggbGVzcyB0aGVuIHdpZHRoIG9mIHRoZSB2aWV3cG9ydAogIAlp Zih4U2Nyb2xsIDwgd2luZG93V2lkdGgpewkKICAJCXBhZ2VXaWR0aCA9IHdpbmRv d1dpZHRoOwogIAl9IGVsc2UgewogIAkJcGFnZVdpZHRoID0geFNjcm9sbDsKICAJ fQoKICAJcmV0dXJuIHtwYWdlV2lkdGg6IHBhZ2VXaWR0aCAscGFnZUhlaWdodDog cGFnZUhlaWdodCAsIHdpbmRvd1dpZHRoOiB3aW5kb3dXaWR0aCwgd2luZG93SGVp Z2h0OiB3aW5kb3dIZWlnaHR9OwogIH0sCgogCWRpc2FibGVTY3JlZW46IGZ1bmN0 aW9uKGNsYXNzTmFtZSwgb3ZlcmxheUlkLCBjb250ZW50SWQpIHsKCQlXaW5kb3dV dGlsaXRpZXMuaW5pdExpZ2h0Ym94KG92ZXJsYXlJZCwgY2xhc3NOYW1lKTsKCQl2 YXIgb2JqQm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5 IikuaXRlbSgwKTsKCgkJLy8gcHJlcCBvYmplY3RzCgkgCXZhciBvYmpPdmVybGF5 ID0gJChvdmVybGF5SWQpOwoKCQl2YXIgcGFnZVNpemUgPSBXaW5kb3dVdGlsaXRp ZXMuZ2V0UGFnZVNpemUoKTsKCgkJLy8gSGlkZSBzZWxlY3QgYm94ZXMgYXMgdGhl eSB3aWxsICdwZWVrJyB0aHJvdWdoIHRoZSBpbWFnZSBpbiBJRQoJCWlmIChjb250 ZW50SWQgJiYgaXNJRSkgewogICAgICAkJCgnc2VsZWN0JykuZWFjaChmdW5jdGlv bihlbGVtZW50KSB7ZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiJ9 KTsKCSAgICAkJCgnIycrY29udGVudElkKycgc2VsZWN0JykuZWFjaChmdW5jdGlv bihlbGVtZW50KSB7ZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUi fSk7CgkJfQkKCQoJCS8vIHNldCBoZWlnaHQgb2YgT3ZlcmxheSB0byB0YWtlIHVw IHdob2xlIHBhZ2UgYW5kIHNob3cKCQlvYmpPdmVybGF5LnN0eWxlLmhlaWdodCA9 IChwYWdlU2l6ZS5wYWdlSGVpZ2h0ICsgJ3B4Jyk7CgkJb2JqT3ZlcmxheS5zdHls ZS53aWR0aCA9IChwYWdlU2l6ZS53aW5kb3dXaWR0aCArICdweCcpOwoJCW9iak92 ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CQoJfSwKCiAJZW5hYmxlU2Ny ZWVuOiBmdW5jdGlvbihpZCkgewogCSAgaWQgPSBpZCB8fCAnb3ZlcmxheV9tb2Rh bCcKCSAJdmFyIG9iak92ZXJsYXkgPSAgJChpZCk7CgkJaWYgKG9iak92ZXJsYXkp IHsKCQkJLy8gaGlkZSBsaWdodGJveCBhbmQgb3ZlcmxheQoJCQlvYmpPdmVybGF5 LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgoJCQkvLyBtYWtlIHNlbGVjdCBib3hl cyB2aXNpYmxlCgkJCWlmIChpc0lFKSB7CiAgICAgICAgJCQoJ3NlbGVjdCcpLmVh Y2goZnVuY3Rpb24oZWxlbWVudCkge2VsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9 ICJ2aXNpYmxlIn0pOwoJCQl9CgkJCW9iak92ZXJsYXkucGFyZW50Tm9kZS5yZW1v dmVDaGlsZChvYmpPdmVybGF5KTsKCQl9Cgl9LAoKCS8vIGluaXRMaWdodGJveCgp CgkvLyBGdW5jdGlvbiBydW5zIG9uIHdpbmRvdyBsb2FkLCBnb2luZyB0aHJvdWdo IGxpbmsgdGFncyBsb29raW5nIGZvciByZWw9ImxpZ2h0Ym94Ii4KCS8vIFRoZXNl IGxpbmtzIHJlY2VpdmUgb25jbGljayBldmVudHMgdGhhdCBlbmFibGUgdGhlIGxp Z2h0Ym94IGRpc3BsYXkgZm9yIHRoZWlyIHRhcmdldHMuCgkvLyBUaGUgZnVuY3Rp b24gYWxzbyBpbnNlcnRzIGh0bWwgbWFya3VwIGF0IHRoZSB0b3Agb2YgdGhlIHBh Z2Ugd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEKCS8vIGNvbnRhaW5lciBmb3IgdGhl IG92ZXJsYXkgcGF0dGVybiBhbmQgdGhlIGlubGluZSBpbWFnZS4KCWluaXRMaWdo dGJveDogZnVuY3Rpb24oaWQsIGNsYXNzTmFtZSkgewoJCS8vIEFscmVhZHkgZG9u ZSwganVzdCB1cGRhdGUgekluZGV4CgkJaWYgKCQoaWQpKSB7CgkJCUVsZW1lbnQu c2V0U3R5bGUoaWQsIHt6SW5kZXg6IFdpbmRvd3MubWF4WkluZGV4ICsgMTB9KTsK CQl9CgkJLy8gY3JlYXRlIG92ZXJsYXkgZGl2IGFuZCBoYXJkY29kZSBzb21lIGZ1 bmN0aW9uYWwgc3R5bGVzIChhZXN0aGV0aWMgc3R5bGVzIGFyZSBpbiBDU1MgZmls ZSkKCQllbHNlIHsKCQkJdmFyIG9iakJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50 c0J5VGFnTmFtZSgiYm9keSIpLml0ZW0oMCk7CgkJCXZhciBvYmpPdmVybGF5ID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgkJCW9iak92ZXJsYXkuc2V0 QXR0cmlidXRlKCdpZCcsIGlkKTsKCQkJb2JqT3ZlcmxheS5jbGFzc05hbWUgPSAi b3ZlcmxheV8iICsgY2xhc3NOYW1lCgkJCW9iak92ZXJsYXkuc3R5bGUuZGlzcGxh eSA9ICdub25lJzsKCQkJb2JqT3ZlcmxheS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNv bHV0ZSc7CgkJCW9iak92ZXJsYXkuc3R5bGUudG9wID0gJzAnOwoJCQlvYmpPdmVy bGF5LnN0eWxlLmxlZnQgPSAnMCc7CgkJCW9iak92ZXJsYXkuc3R5bGUuekluZGV4 ID0gV2luZG93cy5tYXhaSW5kZXggKyAxMDsKCQkgCW9iak92ZXJsYXkuc3R5bGUu d2lkdGggPSAnMTAwJSc7CgkJCW9iakJvZHkuaW5zZXJ0QmVmb3JlKG9iak92ZXJs YXksIG9iakJvZHkuZmlyc3RDaGlsZCk7CgkJfQoJfSwKCQoJc2V0Q29va2llOiBm dW5jdGlvbih2YWx1ZSwgcGFyYW1ldGVycykgewogICAgZG9jdW1lbnQuY29va2ll PSBwYXJhbWV0ZXJzWzBdICsgIj0iICsgZXNjYXBlKHZhbHVlKSArCiAgICAgICgo cGFyYW1ldGVyc1sxXSkgPyAiOyBleHBpcmVzPSIgKyBwYXJhbWV0ZXJzWzFdLnRv R01UU3RyaW5nKCkgOiAiIikgKwogICAgICAoKHBhcmFtZXRlcnNbMl0pID8gIjsg cGF0aD0iICsgcGFyYW1ldGVyc1syXSA6ICIiKSArCiAgICAgICgocGFyYW1ldGVy c1szXSkgPyAiOyBkb21haW49IiArIHBhcmFtZXRlcnNbM10gOiAiIikgKwogICAg ICAoKHBhcmFtZXRlcnNbNF0pID8gIjsgc2VjdXJlIiA6ICIiKTsKICB9LAoKICBn ZXRDb29raWU6IGZ1bmN0aW9uKG5hbWUpIHsKICAgIHZhciBkYyA9IGRvY3VtZW50 LmNvb2tpZTsKICAgIHZhciBwcmVmaXggPSBuYW1lICsgIj0iOwogICAgdmFyIGJl Z2luID0gZGMuaW5kZXhPZigiOyAiICsgcHJlZml4KTsKICAgIGlmIChiZWdpbiA9 PSAtMSkgewogICAgICBiZWdpbiA9IGRjLmluZGV4T2YocHJlZml4KTsKICAgICAg aWYgKGJlZ2luICE9IDApIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAg YmVnaW4gKz0gMjsKICAgIH0KICAgIHZhciBlbmQgPSBkb2N1bWVudC5jb29raWUu aW5kZXhPZigiOyIsIGJlZ2luKTsKICAgIGlmIChlbmQgPT0gLTEpIHsKICAgICAg ZW5kID0gZGMubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHVuZXNjYXBlKGRjLnN1 YnN0cmluZyhiZWdpbiArIHByZWZpeC5sZW5ndGgsIGVuZCkpOwogIH0sCiAgCiAg X2NvbXB1dGVTaXplOiBmdW5jdGlvbihjb250ZW50LCBpZCwgd2lkdGgsIGhlaWdo dCwgbWFyZ2luKSB7CiAgICBpZiAobWFyZ2luID09IG51bGwpCiAgICAgIG1hcmdp biA9IDU7CgogICAgdmFyIG9iakJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5 VGFnTmFtZSgiYm9keSIpLml0ZW0oMCk7CiAgCXZhciB0bXBPYmogPSBkb2N1bWVu dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAJdG1wT2JqLnNldEF0dHJpYnV0ZSgn aWQnLCBpZCk7CgkKICAJaWYgKGhlaWdodCkKICAJICB0bXBPYmouc3R5bGUuaGVp Z2h0ID0gaGVpZ2h0ICsgInB4IgogICAgZWxzZQogICAgICB0bXBPYmouc3R5bGUu d2lkdGggPSB3aWR0aCArICJweCIKICAKICAJdG1wT2JqLnN0eWxlLnBvc2l0aW9u ID0gJ2Fic29sdXRlJzsKICAJdG1wT2JqLnN0eWxlLnRvcCA9ICcwJzsKICAJdG1w T2JqLnN0eWxlLmxlZnQgPSAnMCc7CiAgICB0bXBPYmouc3R5bGUuZGlzcGxheSA9 ICdub25lJzsKCiAgICB0bXBPYmouaW5uZXJIVE1MID0gY29udGVudDsKICAJb2Jq Qm9keS5pbnNlcnRCZWZvcmUodG1wT2JqLCBvYmpCb2R5LmZpcnN0Q2hpbGQpOwog IAkKICAJdmFyIHNpemU7CiAgCWlmIChoZWlnaHQpCiAgCSAgc2l6ZSA9ICQoaWQp LmdldERpbWVuc2lvbnMoKS53aWR0aCArIG1hcmdpbjsKICAgIGVsc2UKICAgICAg c2l6ZSA9ICQoaWQpLmdldERpbWVuc2lvbnMoKS5oZWlnaHQgKyBtYXJnaW47CiAg CW9iakJvZHkucmVtb3ZlQ2hpbGQodG1wT2JqKTsKICAgIAogIAlyZXR1cm4gc2l6 ZTsKICB9CQp9CgoK ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=searchajax.js Content-Type: application/javascript; charset=UTF-8; name=searchajax.js Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/searchajax.js Content-Transfer-Encoding: Base64 ZnVuY3Rpb24gZXZhbEhUTUxqcyh0eHQpCgl7CgkJdmFyIHN0ZXh0ID0gJzxzY3Jp cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOwoJCXZhciBldGV4dCA9ICc8L3Nj cmlwdD4nOwoKCQl2YXIgdCA9IHR4dDsKCQl2YXIgYyA9IDA7CgkJCgkJd2hpbGUg KCB0cnVlICkKCQl7CgkJCXMgPSB0LmluZGV4T2Yoc3RleHQpOwoJCQlpZiAoIHMg PT0gLTEgKQoJCQkJcmV0dXJuOwoJCQkJCgkJCXQgPSB0LnN1YnN0cihzK3N0ZXh0 Lmxlbmd0aCk7CgkJCQkKCQkJanMgPSB0LnN1YnN0cigwLHQuaW5kZXhPZihldGV4 dCkpOwoJCQkKCQkJZXZhbChqcyk7CgkJCQoJCQl0ID0gdC5zdWJzdHIodC5pbmRl eE9mKGV0ZXh0KStldGV4dC5sZW5ndGgpOwoJCX0KCX0KCmZ1bmN0aW9uIGNoYW5n ZU1vZChtb2QsYXBwU3RhdGUpCnsKCXZhciBhZGRMbmsgPSBhZGRMaW5rIHx8ICcn OwoKICAgIHZhciBvcHQgPQogICAgewogICAgICAgIC8vIFVzZSBQT1NUCiAgICAg ICAgbWV0aG9kOiAncG9zdCcsCiAgICAgICAgLy8gU2VuZCB0aGlzIGxvdmVseSBk YXRhCiAgICAgICAgcG9zdEJvZHk6IGFwcFN0YXRlKycmTWluZGV4X2FqbW9kPScr bW9kKycmJythZGRMbmssCiAgICAgICAgZXZhbFNjcmlwdHM6IHRydWUsCiAgICAg ICAgLy8gSGFuZGxlIHN1Y2Nlc3NmdWwgcmVzcG9uc2UKICAgICAgICBvblN1Y2Nl c3M6IGZ1bmN0aW9uKHQpCiAgICAgICAgewogICAgICAgICAgICAkKCdqc19zZWFy Y2gnKS5pbm5lckhUTUwgPSB0LnJlc3BvbnNlVGV4dDsKICAgICAgICAgICAgaW5p dEFmdGVyQWpheCgnanNfc2VhcmNoJyk7CiAgICAgICAgICAgIGV2YWxIVE1ManMo IHQucmVzcG9uc2VUZXh0ICk7CiAgICAgICAgfSwKICAgICAgICAvLyBIYW5kbGUg b3RoZXIgZXJyb3JzCiAgICAgICAgb25GYWlsdXJlOiBmdW5jdGlvbih0KQogICAg ICAgIHsKICAgICAgICAgICAgLy9hbGVydCgnRXJyb3IgJyk7CiAgICAgICAgfQog ICAgfQogICAgbmV3IEFqYXguUmVxdWVzdCgndGFibG9hZGVyLnBocD8nLCBvcHQp Owp9 ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=sendReport.js Content-Type: application/javascript; charset=UTF-8; name=sendReport.js Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/sendReport.js Content-Transfer-Encoding: Base64 ZnVuY3Rpb24gR2V0X0Nvb2tpZSggY2hlY2tfbmFtZSApIHsKCXZhciBhX2FsbF9j b29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCAnOycgKTsKCXZhciBhX3Rl bXBfY29va2llID0gJyc7Cgl2YXIgY29va2llX25hbWUgPSAnJzsKCXZhciBjb29r aWVfdmFsdWUgPSAnJzsKCXZhciBiX2Nvb2tpZV9mb3VuZCA9IGZhbHNlOyAvLyBz ZXQgYm9vbGVhbiB0L2YgZGVmYXVsdCBmCgkKCWZvciAoIGkgPSAwOyBpIDwgYV9h bGxfY29va2llcy5sZW5ndGg7IGkrKyApCgl7CgkJYV90ZW1wX2Nvb2tpZSA9IGFf YWxsX2Nvb2tpZXNbaV0uc3BsaXQoICc9JyApOwoJCWNvb2tpZV9uYW1lID0gYV90 ZW1wX2Nvb2tpZVswXS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOwoJCWlmICgg Y29va2llX25hbWUgPT0gY2hlY2tfbmFtZSApCgkJewoJCQliX2Nvb2tpZV9mb3Vu ZCA9IHRydWU7CgkJCWlmICggYV90ZW1wX2Nvb2tpZS5sZW5ndGggPiAxICkKCQkJ ewoJCQkJY29va2llX3ZhbHVlID0gdW5lc2NhcGUoIGFfdGVtcF9jb29raWVbMV0u cmVwbGFjZSgvXlxzK3xccyskL2csICcnKSApOwoJCQl9CgkJCXJldHVybiBjb29r aWVfdmFsdWU7CgkJCWJyZWFrOwoJCX0KCQlhX3RlbXBfY29va2llID0gbnVsbDsK CQljb29raWVfbmFtZSA9ICcnOwoJfQoJaWYgKCAhYl9jb29raWVfZm91bmQgKQoJ ewoJCXJldHVybiBudWxsOwoJfQp9CgpmdW5jdGlvbiBTZXRfQ29va2llKCBuYW1l LCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUgKSB7Cgl2YXIg dG9kYXkgPSBuZXcgRGF0ZSgpOwoJdG9kYXkuc2V0VGltZSggdG9kYXkuZ2V0VGlt ZSgpICk7CglpZiAoIGV4cGlyZXMgKQoJewoJCWV4cGlyZXMgPSBleHBpcmVzICog MTAwMCAqIDYwICogNjAgKiAyNDsKCX0KCXZhciBleHBpcmVzX2RhdGUgPSBuZXcg RGF0ZSggdG9kYXkuZ2V0VGltZSgpICsgKGV4cGlyZXMpICk7CgoJZG9jdW1lbnQu Y29va2llID0gbmFtZSArICI9IiArZXNjYXBlKCB2YWx1ZSApICsKCQkoICggZXhw aXJlcyApID8gIjtleHBpcmVzPSIgKyBleHBpcmVzX2RhdGUudG9HTVRTdHJpbmco KSA6ICIiICkgKyAvL2V4cGlyZXMudG9HTVRTdHJpbmcoKQoJCSggKCBwYXRoICkg PyAiO3BhdGg9IiArIHBhdGggOiAiIiApICsgCgkJKCAoIGRvbWFpbiApID8gIjtk b21haW49IiArIGRvbWFpbiA6ICIiICkgKwoJCSggKCBzZWN1cmUgKSA/ICI7c2Vj dXJlIiA6ICIiICk7Cn0KCmZ1bmN0aW9uIERlbGV0ZV9Db29raWUoIG5hbWUsIHBh dGgsIGRvbWFpbiApIHsKCWlmICggR2V0X0Nvb2tpZSggbmFtZSApICkgZG9jdW1l bnQuY29va2llID0gbmFtZSArICI9IiArCgkJCSggKCBwYXRoICkgPyAiO3BhdGg9 IiArIHBhdGggOiAiIikgKwoJCQkoICggZG9tYWluICkgPyAiO2RvbWFpbj0iICsg ZG9tYWluIDogIiIgKSArCgkJCSI7ZXhwaXJlcz1UaHUsIDAxLUphbi0xOTcwIDAw OjAwOjAxIEdNVCI7Cn0KCmZ1bmN0aW9uIGNyZWF0ZUlucHV0KG5hbWUsdmFsdWUp IHsKCXJldHVybiAnPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9IicgKyBuYW1lICsg JyIgbmFtZT0iJyArIG5hbWUgKyAnIiB2YWx1ZT0iJyArIHZhbHVlICsgJyIgLz4n Owp9CgpmdW5jdGlvbiBjbGllbnRfZGF0YShpbmZvKQp7CglpZiAoaW5mbyA9PSAn d2lkdGgnKQoJewoJCXZhciB3aWR0aCA9IChzY3JlZW4ud2lkdGgpID8gc2NyZWVu LndpZHRoOicnOwoJCXZhciBoZWlnaHQgPSAoc2NyZWVuLmhlaWdodCkgPyBzY3Jl ZW4uaGVpZ2h0OicnOwoJCWlmICh0eXBlb2Yoc2NyZWVuLmRldmljZVhEUEkpID09 ICdudW1iZXInKSB7CgkJCXdpZHRoICo9IHNjcmVlbi5kZXZpY2VYRFBJL3NjcmVl bi5sb2dpY2FsWERQSTsKCQkJaGVpZ2h0ICo9IHNjcmVlbi5kZXZpY2VZRFBJL3Nj cmVlbi5sb2dpY2FsWURQSTsKCQl9IAoJCXZhciBzdHJpbmdfdmFsdWUgPSAnJyAr IHdpZHRoICsgJyB4ICcgKyBoZWlnaHQgKyAnIHBpeGVscyc7CgkJcmV0dXJuICh3 aWR0aCAmJiBoZWlnaHQpID8gc3RyaW5nX3ZhbHVlIDogJyc7Cgl9CgllbHNlIGlm IChpbmZvID09ICdqcycgKQoJewoJCXJldHVybiAxOwoJfQoJZWxzZSBpZiAoIGlu Zm8gPT0gJ2Nvb2tpZXMnICkKCXsKCQlleHBpcmVzID0nJzsKCQlTZXRfQ29va2ll KCAnY29va2llX3Rlc3QnLCAnaXRfd29ya2VkJyAsIGV4cGlyZXMsICcnLCAnJywg JycgKTsKCQlpZiAoIEdldF9Db29raWUoICdjb29raWVfdGVzdCcgKSApCgkJewoJ CQl2YXIgdmFsdWUgPSAxOwoJCX0KCQllbHNlIHsKCQkJdmFyIHZhbHVlID0gMDsK CQl9CgkJcmV0dXJuIHZhbHVlOwoJfQp9Cgp2YXIgRmxhc2hEZXRlY3Q9bmV3IGZ1 bmN0aW9uKCl7dmFyIHNlbGY9dGhpcztzZWxmLmluc3RhbGxlZD1mYWxzZTtzZWxm LnJhdz0iIjtzZWxmLm1ham9yPS0xO3NlbGYubWlub3I9LTE7c2VsZi5yZXZpc2lv bj0tMTtzZWxmLnJldmlzaW9uU3RyPSIiO3ZhciBhY3RpdmVYRGV0ZWN0UnVsZXM9 W3sibmFtZSI6IlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjciLCJ2ZXJz aW9uIjpmdW5jdGlvbihvYmope3JldHVybiBnZXRBY3RpdmVYVmVyc2lvbihvYmop O319LHsibmFtZSI6IlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjYiLCJ2 ZXJzaW9uIjpmdW5jdGlvbihvYmope3ZhciB2ZXJzaW9uPSI2LDAsMjEiO3RyeXtv YmouQWxsb3dTY3JpcHRBY2Nlc3M9ImFsd2F5cyI7dmVyc2lvbj1nZXRBY3RpdmVY VmVyc2lvbihvYmopO31jYXRjaChlcnIpe30KcmV0dXJuIHZlcnNpb247fX0seyJu YW1lIjoiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2giLCJ2ZXJzaW9uIjpm dW5jdGlvbihvYmope3JldHVybiBnZXRBY3RpdmVYVmVyc2lvbihvYmopO319XTt2 YXIgZ2V0QWN0aXZlWFZlcnNpb249ZnVuY3Rpb24oYWN0aXZlWE9iail7dmFyIHZl cnNpb249LTE7dHJ5e3ZlcnNpb249YWN0aXZlWE9iai5HZXRWYXJpYWJsZSgiJHZl cnNpb24iKTt9Y2F0Y2goZXJyKXt9CnJldHVybiB2ZXJzaW9uO307dmFyIGdldEFj dGl2ZVhPYmplY3Q9ZnVuY3Rpb24obmFtZSl7dmFyIG9iaj0tMTt0cnl7b2JqPW5l dyBBY3RpdmVYT2JqZWN0KG5hbWUpO31jYXRjaChlcnIpe29iaj17YWN0aXZlWEVy cm9yOnRydWV9O30KcmV0dXJuIG9iajt9O3ZhciBwYXJzZUFjdGl2ZVhWZXJzaW9u PWZ1bmN0aW9uKHN0cil7dmFyIHZlcnNpb25BcnJheT1zdHIuc3BsaXQoIiwiKTty ZXR1cm57InJhdyI6c3RyLCJtYWpvciI6cGFyc2VJbnQodmVyc2lvbkFycmF5WzBd LnNwbGl0KCIgIilbMV0sMTApLCJtaW5vciI6cGFyc2VJbnQodmVyc2lvbkFycmF5 WzFdLDEwKSwicmV2aXNpb24iOnBhcnNlSW50KHZlcnNpb25BcnJheVsyXSwxMCks InJldmlzaW9uU3RyIjp2ZXJzaW9uQXJyYXlbMl19O307dmFyIHBhcnNlU3RhbmRh cmRWZXJzaW9uPWZ1bmN0aW9uKHN0cil7dmFyIGRlc2NQYXJ0cz1zdHIuc3BsaXQo LyArLyk7dmFyIG1ham9yTWlub3I9ZGVzY1BhcnRzWzJdLnNwbGl0KC9cLi8pO3Zh ciByZXZpc2lvblN0cj1kZXNjUGFydHNbM107cmV0dXJueyJyYXciOnN0ciwibWFq b3IiOnBhcnNlSW50KG1ham9yTWlub3JbMF0sMTApLCJtaW5vciI6cGFyc2VJbnQo bWFqb3JNaW5vclsxXSwxMCksInJldmlzaW9uU3RyIjpyZXZpc2lvblN0ciwicmV2 aXNpb24iOnBhcnNlUmV2aXNpb25TdHJUb0ludChyZXZpc2lvblN0cil9O307dmFy IHBhcnNlUmV2aXNpb25TdHJUb0ludD1mdW5jdGlvbihzdHIpe3JldHVybiBwYXJz ZUludChzdHIucmVwbGFjZSgvW2EtekEtWl0vZywiIiksMTApfHxzZWxmLnJldmlz aW9uO307c2VsZi5tYWpvckF0TGVhc3Q9ZnVuY3Rpb24odmVyc2lvbil7cmV0dXJu IHNlbGYubWFqb3I+PXZlcnNpb247fTtzZWxmLm1pbm9yQXRMZWFzdD1mdW5jdGlv bih2ZXJzaW9uKXtyZXR1cm4gc2VsZi5taW5vcj49dmVyc2lvbjt9O3NlbGYucmV2 aXNpb25BdExlYXN0PWZ1bmN0aW9uKHZlcnNpb24pe3JldHVybiBzZWxmLnJldmlz aW9uPj12ZXJzaW9uO307c2VsZi52ZXJzaW9uQXRMZWFzdD1mdW5jdGlvbihtYWpv cil7dmFyIHByb3BlcnRpZXM9W3NlbGYubWFqb3Isc2VsZi5taW5vcixzZWxmLnJl dmlzaW9uXTt2YXIgbGVuPU1hdGgubWluKHByb3BlcnRpZXMubGVuZ3RoLGFyZ3Vt ZW50cy5sZW5ndGgpO2ZvcihpPTA7aTxsZW47aSsrKXtpZihwcm9wZXJ0aWVzW2ld Pj1hcmd1bWVudHNbaV0pe2lmKGkrMTxsZW4mJnByb3BlcnRpZXNbaV09PWFyZ3Vt ZW50c1tpXSl7Y29udGludWU7fWVsc2V7cmV0dXJuIHRydWU7fX1lbHNle3JldHVy biBmYWxzZTt9fX07c2VsZi5GbGFzaERldGVjdD1mdW5jdGlvbigpe2lmKG5hdmln YXRvci5wbHVnaW5zJiZuYXZpZ2F0b3IucGx1Z2lucy5sZW5ndGg+MCl7dmFyIHR5 cGU9J2FwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoJzt2YXIgbWltZVR5cGVz PW5hdmlnYXRvci5taW1lVHlwZXM7aWYobWltZVR5cGVzJiZtaW1lVHlwZXNbdHlw ZV0mJm1pbWVUeXBlc1t0eXBlXS5lbmFibGVkUGx1Z2luJiZtaW1lVHlwZXNbdHlw ZV0uZW5hYmxlZFBsdWdpbi5kZXNjcmlwdGlvbil7dmFyIHZlcnNpb249bWltZVR5 cGVzW3R5cGVdLmVuYWJsZWRQbHVnaW4uZGVzY3JpcHRpb247dmFyIHZlcnNpb25P Ymo9cGFyc2VTdGFuZGFyZFZlcnNpb24odmVyc2lvbik7c2VsZi5yYXc9dmVyc2lv bk9iai5yYXc7c2VsZi5tYWpvcj12ZXJzaW9uT2JqLm1ham9yO3NlbGYubWlub3I9 dmVyc2lvbk9iai5taW5vcjtzZWxmLnJldmlzaW9uU3RyPXZlcnNpb25PYmoucmV2 aXNpb25TdHI7c2VsZi5yZXZpc2lvbj12ZXJzaW9uT2JqLnJldmlzaW9uO3NlbGYu aW5zdGFsbGVkPXRydWU7fX1lbHNlIGlmKG5hdmlnYXRvci5hcHBWZXJzaW9uLmlu ZGV4T2YoIk1hYyIpPT0tMSYmd2luZG93LmV4ZWNTY3JpcHQpe3ZhciB2ZXJzaW9u PS0xO2Zvcih2YXIgaT0wO2k8YWN0aXZlWERldGVjdFJ1bGVzLmxlbmd0aCYmdmVy c2lvbj09LTE7aSsrKXt2YXIgb2JqPWdldEFjdGl2ZVhPYmplY3QoYWN0aXZlWERl dGVjdFJ1bGVzW2ldLm5hbWUpO2lmKCFvYmouYWN0aXZlWEVycm9yKXtzZWxmLmlu c3RhbGxlZD10cnVlO3ZlcnNpb249YWN0aXZlWERldGVjdFJ1bGVzW2ldLnZlcnNp b24ob2JqKTtpZih2ZXJzaW9uIT0tMSl7dmFyIHZlcnNpb25PYmo9cGFyc2VBY3Rp dmVYVmVyc2lvbih2ZXJzaW9uKTtzZWxmLnJhdz12ZXJzaW9uT2JqLnJhdztzZWxm Lm1ham9yPXZlcnNpb25PYmoubWFqb3I7c2VsZi5taW5vcj12ZXJzaW9uT2JqLm1p bm9yO3NlbGYucmV2aXNpb249dmVyc2lvbk9iai5yZXZpc2lvbjtzZWxmLnJldmlz aW9uU3RyPXZlcnNpb25PYmoucmV2aXNpb25TdHI7fX19fX0oKTt9O0ZsYXNoRGV0 ZWN0LkpTX1JFTEVBU0U9IjEuMC40IjsKCgoKLyp2YXIgSlNFbmFibGUgCQk9IGNy ZWF0ZUlucHV0KCdKU0VuYWJsZScsY2xpZW50X2RhdGEoJ2pzJykpOwp2YXIgY29v a2llRW5hYmxlIAk9IGNyZWF0ZUlucHV0KCdjb29raWVFbmFibGUnLGNsaWVudF9k YXRhKCdjb29raWVzJykpOwp2YXIgc2NyZWVuUmVzIAkJPSBjcmVhdGVJbnB1dCgn c2NyZWVuUmVzJyxjbGllbnRfZGF0YSgnd2lkdGgnKSk7CnZhciBmbGFzaFBsYXll clZlcnMJPSBjcmVhdGVJbnB1dCgnZmxhc2hQbGF5ZXJWZXJzJyxGbGFzaERldGVj dC5tYWpvcisnLicrRmxhc2hEZXRlY3QubWlub3IrJyAnK0ZsYXNoRGV0ZWN0LnJl dmlzaW9uU3RyKTsqLwoKLypmdW5jdGlvbiBTZXRJbmZvKGlkKXsKCXZhciBkYXRh ID0gSlNFbmFibGUgKyBjb29raWVFbmFibGUgKyBzY3JlZW5SZXMgKyBmbGFzaFBs YXllclZlcnM7CgkkKGlkKS5pbm5lckhUTUwgPSBkYXRhOwp9Ki8KCmZ1bmN0aW9u IEVtYWlsVGV0cyhpZCx0ZXh0KXsKCXZhciBhbHBoYUV4cCA9IC9eWy0rXC4wLTk9 YS16QS1aX10rQChbLTAtOWEtekEtWl0rXC4pKyhbMC05YS16QS1aXSl7Miw0fSQv OwoJIGlmICgkKGlkKS52YWx1ZSA9PSAnJyl7CgkJYWxlcnQodGV4dCsnIGlzIHJl cXVpcmVkIScpOwoJCSQoaWQpLmZvY3VzKCk7CgkJcmV0dXJuIGZhbHNlOwoJIH1l bHNlIGlmICghYWxwaGFFeHAudGVzdCgkKGlkKS52YWx1ZSkpewoJCWFsZXJ0KHRl eHQrJyBpcyBub3QgY29ycmVjdCEnKTsKCQkkKGlkKS5mb2N1cygpOwoJCXJldHVy biBmYWxzZTsKCX1lbHNlewoJCXJldHVybiB0cnVlOwoJfQp9Cg== ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=sctrack.js Content-Type: application/javascript; charset=UTF-8; name=sctrack.js Content-Location: http://tk.sexcounter.com/0.3.0/js/sctrack.js Content-Transfer-Encoding: Base64 dmFyIHN3Zm9iamVjdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGIoKXtpZighdyl7dHJ5 e3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5hcHBlbmRD aGlsZChsLmNyZWF0ZUVsZW1lbnQoInNwYW4iKSk7YS5wYXJlbnROb2RlLnJlbW92 ZUNoaWxkKGEpfWNhdGNoKFApe3JldHVybn13PSEwO2E9Qi5sZW5ndGg7Zm9yKHZh ciBjPTA7YzxhO2MrKylCW2NdKCl9fWZ1bmN0aW9uIGcoYSl7dz9hKCk6QltCLmxl bmd0aF09YX1mdW5jdGlvbiBmKGEpe2lmKHR5cGVvZiBwLmFkZEV2ZW50TGlzdGVu ZXIhPW4pcC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixhLCExKTtlbHNlIGlmKHR5 cGVvZiBsLmFkZEV2ZW50TGlzdGVuZXIhPW4pbC5hZGRFdmVudExpc3RlbmVyKCJs b2FkIixhLCExKTtlbHNlIGlmKHR5cGVvZiBwLmF0dGFjaEV2ZW50IT1uKXgocCwi b25sb2FkIixhKTtlbHNlIGlmKHR5cGVvZiBwLm9ubG9hZD09ImZ1bmN0aW9uIil7 dmFyIGM9cC5vbmxvYWQ7cC5vbmxvYWQ9CmZ1bmN0aW9uKCl7YygpO2EoKX19ZWxz ZSBwLm9ubG9hZD1hfWZ1bmN0aW9uIGgoKXt2YXIgYT1sLmdldEVsZW1lbnRzQnlU YWdOYW1lKCJib2R5IilbMF0sYz1sLmNyZWF0ZUVsZW1lbnQocyk7Yy5zZXRBdHRy aWJ1dGUoInR5cGUiLEMpO3ZhciBkPWEuYXBwZW5kQ2hpbGQoYyk7aWYoZCl7dmFy IGI9MDsoZnVuY3Rpb24oKXtpZih0eXBlb2YgZC5HZXRWYXJpYWJsZSE9bil7dmFy IGk9ZC5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKTtpZihpKWk9aS5zcGxpdCgiICIp WzFdLnNwbGl0KCIsIiksai5wdj1bcGFyc2VJbnQoaVswXSwxMCkscGFyc2VJbnQo aVsxXSwxMCkscGFyc2VJbnQoaVsyXSwxMCldfWVsc2UgaWYoYjwxMCl7YisrO3Nl dFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwxMCk7cmV0dXJufWEucmVtb3ZlQ2hp bGQoYyk7ZD1udWxsO2UoKX0pKCl9ZWxzZSBlKCl9ZnVuY3Rpb24gZSgpe3ZhciBK PXUubGVuZ3RoO2lmKEo+MClmb3IodmFyIGI9MDtiPEo7YisrKXt2YXIgaT11W2Jd LmlkLApmPXVbYl0uY2FsbGJhY2tGbixrPXtzdWNjZXNzOiExLGlkOml9O2lmKGou cHZbMF0+MCl7dmFyIGU9cShpKTtpZihlKWlmKEQodVtiXS5zd2ZWZXJzaW9uKSYm IShqLndrJiZqLndrPDMxMikpe2lmKHkoaSwhMCksZilrLnN1Y2Nlc3M9ITAsay5y ZWY9bShpKSxmKGspfWVsc2UgaWYodVtiXS5leHByZXNzSW5zdGFsbCYmYSgpKXtr PXt9O2suZGF0YT11W2JdLmV4cHJlc3NJbnN0YWxsO2sud2lkdGg9ZS5nZXRBdHRy aWJ1dGUoIndpZHRoIil8fCIwIjtrLmhlaWdodD1lLmdldEF0dHJpYnV0ZSgiaGVp Z2h0Iil8fCIwIjtpZihlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSlrLnN0eWxlY2xh c3M9ZS5nZXRBdHRyaWJ1dGUoImNsYXNzIik7aWYoZS5nZXRBdHRyaWJ1dGUoImFs aWduIikpay5hbGlnbj1lLmdldEF0dHJpYnV0ZSgiYWxpZ24iKTt2YXIgZz17fTtl PWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcmFtIik7Zm9yKHZhciBoPWUubGVu Z3RoLHI9MDtyPGg7cisrKWVbcl0uZ2V0QXR0cmlidXRlKCJuYW1lIikudG9Mb3dl ckNhc2UoKSE9CiJtb3ZpZSImJihnW2Vbcl0uZ2V0QXR0cmlidXRlKCJuYW1lIild PWVbcl0uZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpKTtjKGssZyxpLGYpfWVsc2UgZChl KSxmJiZmKGspfWVsc2UgaWYoeShpLCEwKSxmKXtpZigoaT1tKGkpKSYmdHlwZW9m IGkuU2V0VmFyaWFibGUhPW4pay5zdWNjZXNzPSEwLGsucmVmPWk7ZihrKX19fWZ1 bmN0aW9uIG0oYSl7dmFyIGM9bnVsbDtpZigoYT1xKGEpKSYmYS5ub2RlTmFtZT09 Ik9CSkVDVCIpdHlwZW9mIGEuU2V0VmFyaWFibGUhPW4/Yz1hOihhPWEuZ2V0RWxl bWVudHNCeVRhZ05hbWUocylbMF0pJiYoYz1hKTtyZXR1cm4gY31mdW5jdGlvbiBh KCl7cmV0dXJuIUUmJkQoIjYuMC42NSIpJiYoai53aW58fGoubWFjKSYmIShqLndr JiZqLndrPDMxMil9ZnVuY3Rpb24gYyhhLGMsYixkKXtFPSEwO0g9ZHx8bnVsbDtL PXtzdWNjZXNzOiExLGlkOmJ9O3ZhciBlPXEoYik7aWYoZSl7ZS5ub2RlTmFtZT09 Ik9CSkVDVCI/KEE9aShlKSxGPW51bGwpOihBPWUsRj0KYik7YS5pZD1MO2lmKHR5 cGVvZiBhLndpZHRoPT1ufHwhLyUkLy50ZXN0KGEud2lkdGgpJiZwYXJzZUludChh LndpZHRoLDEwKTwzMTApYS53aWR0aD0iMzEwIjtpZih0eXBlb2YgYS5oZWlnaHQ9 PW58fCEvJSQvLnRlc3QoYS5oZWlnaHQpJiZwYXJzZUludChhLmhlaWdodCwxMCk8 MTM3KWEuaGVpZ2h0PSIxMzciO2wudGl0bGU9bC50aXRsZS5zbGljZSgwLDQ3KSsi IC0gRmxhc2ggUGxheWVyIEluc3RhbGxhdGlvbiI7ZD1qLmllJiZqLndpbj8iQWN0 aXZlWCI6IlBsdWdJbiI7ZD0iTU1yZWRpcmVjdFVSTD0iK3AubG9jYXRpb24udG9T dHJpbmcoKS5yZXBsYWNlKC8mL2csIiUyNiIpKyImTU1wbGF5ZXJUeXBlPSIrZCsi Jk1NZG9jdGl0bGU9IitsLnRpdGxlO3R5cGVvZiBjLmZsYXNodmFycyE9bj9jLmZs YXNodmFycys9IiYiK2Q6Yy5mbGFzaHZhcnM9ZDtpZihqLmllJiZqLndpbiYmZS5y ZWFkeVN0YXRlIT00KWQ9bC5jcmVhdGVFbGVtZW50KCJkaXYiKSxiKz0iU1dGT2Jq ZWN0TmV3IiwKZC5zZXRBdHRyaWJ1dGUoImlkIixiKSxlLnBhcmVudE5vZGUuaW5z ZXJ0QmVmb3JlKGQsZSksZS5zdHlsZS5kaXNwbGF5PSJub25lIixmdW5jdGlvbigp e2UucmVhZHlTdGF0ZT09ND9lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSk6c2V0 VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDEwKX0oKTtrKGEsYyxiKX19ZnVuY3Rp b24gZChhKXtpZihqLmllJiZqLndpbiYmYS5yZWFkeVN0YXRlIT00KXt2YXIgYz1s LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUo YyxhKTtjLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGkoYSksYyk7YS5zdHlsZS5k aXNwbGF5PSJub25lIjsoZnVuY3Rpb24oKXthLnJlYWR5U3RhdGU9PTQ/YS5wYXJl bnROb2RlLnJlbW92ZUNoaWxkKGEpOnNldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxl ZSwxMCl9KSgpfWVsc2UgYS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChpKGEpLGEp fWZ1bmN0aW9uIGkoYSl7dmFyIGM9bC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKaWYo ai53aW4mJmouaWUpYy5pbm5lckhUTUw9YS5pbm5lckhUTUw7ZWxzZSBpZihhPWEu Z2V0RWxlbWVudHNCeVRhZ05hbWUocylbMF0paWYoYT1hLmNoaWxkTm9kZXMpZm9y KHZhciBiPWEubGVuZ3RoLGQ9MDtkPGI7ZCsrKSEoYVtkXS5ub2RlVHlwZT09MSYm YVtkXS5ub2RlTmFtZT09IlBBUkFNIikmJmFbZF0ubm9kZVR5cGUhPTgmJmMuYXBw ZW5kQ2hpbGQoYVtkXS5jbG9uZU5vZGUoITApKTtyZXR1cm4gY31mdW5jdGlvbiBr KGEsYyxkKXt2YXIgYixpPXEoZCk7aWYoai53ayYmai53azwzMTIpcmV0dXJuIGI7 aWYoaSl7aWYodHlwZW9mIGEuaWQ9PW4pYS5pZD1kO2lmKGouaWUmJmoud2luKXt2 YXIgZT0iIixrO2ZvcihrIGluIGEpaWYoYVtrXSE9T2JqZWN0LnByb3RvdHlwZVtr XSlrLnRvTG93ZXJDYXNlKCk9PSJkYXRhIj9jLm1vdmllPWFba106ay50b0xvd2Vy Q2FzZSgpPT0ic3R5bGVjbGFzcyI/ZSs9JyBjbGFzcz0iJythW2tdKyciJzprLnRv TG93ZXJDYXNlKCkhPSJjbGFzc2lkIiYmCihlKz0iICIraysnPSInK2Fba10rJyIn KTtrPSIiO2Zvcih2YXIgZiBpbiBjKWNbZl0hPU9iamVjdC5wcm90b3R5cGVbZl0m JihrKz0nPHBhcmFtIG5hbWU9IicrZisnIiB2YWx1ZT0iJytjW2ZdKyciIC8+Jyk7 aS5vdXRlckhUTUw9JzxvYmplY3QgY2xhc3NpZD0iY2xzaWQ6RDI3Q0RCNkUtQUU2 RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIicrZSsiPiIraysiPC9vYmplY3Q+IjtH W0cubGVuZ3RoXT1hLmlkO2I9cShhLmlkKX1lbHNle2Y9bC5jcmVhdGVFbGVtZW50 KHMpO2Yuc2V0QXR0cmlidXRlKCJ0eXBlIixDKTtmb3IodmFyIGcgaW4gYSlhW2dd IT1PYmplY3QucHJvdG90eXBlW2ddJiYoZy50b0xvd2VyQ2FzZSgpPT0ic3R5bGVj bGFzcyI/Zi5zZXRBdHRyaWJ1dGUoImNsYXNzIixhW2ddKTpnLnRvTG93ZXJDYXNl KCkhPSJjbGFzc2lkIiYmZi5zZXRBdHRyaWJ1dGUoZyxhW2ddKSk7Zm9yKGUgaW4g YyljW2VdIT1PYmplY3QucHJvdG90eXBlW2VdJiZlLnRvTG93ZXJDYXNlKCkhPQoi bW92aWUiJiYoYT1mLGs9ZSxnPWNbZV0sZD1sLmNyZWF0ZUVsZW1lbnQoInBhcmFt IiksZC5zZXRBdHRyaWJ1dGUoIm5hbWUiLGspLGQuc2V0QXR0cmlidXRlKCJ2YWx1 ZSIsZyksYS5hcHBlbmRDaGlsZChkKSk7aS5wYXJlbnROb2RlLnJlcGxhY2VDaGls ZChmLGkpO2I9Zn19cmV0dXJuIGJ9ZnVuY3Rpb24gcihhKXt2YXIgYz1xKGEpO2lm KGMmJmMubm9kZU5hbWU9PSJPQkpFQ1QiKWouaWUmJmoud2luPyhjLnN0eWxlLmRp c3BsYXk9Im5vbmUiLGZ1bmN0aW9uKCl7aWYoYy5yZWFkeVN0YXRlPT00KXt2YXIg ZD1xKGEpO2lmKGQpe2Zvcih2YXIgYiBpbiBkKXR5cGVvZiBkW2JdPT0iZnVuY3Rp b24iJiYoZFtiXT1udWxsKTtkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCl9fWVs c2Ugc2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDEwKX0oKSk6Yy5wYXJlbnRO b2RlLnJlbW92ZUNoaWxkKGMpfWZ1bmN0aW9uIHEoYSl7dmFyIGM9bnVsbDt0cnl7 Yz1sLmdldEVsZW1lbnRCeUlkKGEpfWNhdGNoKGQpe31yZXR1cm4gY30KZnVuY3Rp b24geChhLGMsZCl7YS5hdHRhY2hFdmVudChjLGQpO3pbei5sZW5ndGhdPVthLGMs ZF19ZnVuY3Rpb24gRChhKXt2YXIgYz1qLnB2O2E9YS5zcGxpdCgiLiIpO2FbMF09 cGFyc2VJbnQoYVswXSwxMCk7YVsxXT1wYXJzZUludChhWzFdLDEwKXx8MDthWzJd PXBhcnNlSW50KGFbMl0sMTApfHwwO3JldHVybiBjWzBdPmFbMF18fGNbMF09PWFb MF0mJmNbMV0+YVsxXXx8Y1swXT09YVswXSYmY1sxXT09YVsxXSYmY1syXT49YVsy XT8hMDohMX1mdW5jdGlvbiBvKGEsYyxkLGIpe2lmKCFqLmllfHwhai5tYWMpe3Zh ciBpPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTtpZihpKXtkPWQm JnR5cGVvZiBkPT0ic3RyaW5nIj9kOiJzY3JlZW4iO2ImJihJPXQ9bnVsbCk7aWYo IXR8fEkhPWQpYj1sLmNyZWF0ZUVsZW1lbnQoInN0eWxlIiksYi5zZXRBdHRyaWJ1 dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGIuc2V0QXR0cmlidXRlKCJtZWRpYSIsZCks dD1pLmFwcGVuZENoaWxkKGIpLApqLmllJiZqLndpbiYmdHlwZW9mIGwuc3R5bGVT aGVldHMhPW4mJmwuc3R5bGVTaGVldHMubGVuZ3RoPjAmJih0PWwuc3R5bGVTaGVl dHNbbC5zdHlsZVNoZWV0cy5sZW5ndGgtMV0pLEk9ZDtqLmllJiZqLndpbj90JiZ0 eXBlb2YgdC5hZGRSdWxlPT1zJiZ0LmFkZFJ1bGUoYSxjKTp0JiZ0eXBlb2YgbC5j cmVhdGVUZXh0Tm9kZSE9biYmdC5hcHBlbmRDaGlsZChsLmNyZWF0ZVRleHROb2Rl KGErIiB7IitjKyJ9IikpfX19ZnVuY3Rpb24geShhLGMpe2lmKE0pe3ZhciBkPWM/ InZpc2libGUiOiJoaWRkZW4iO3cmJnEoYSk/cShhKS5zdHlsZS52aXNpYmlsaXR5 PWQ6bygiIyIrYSwidmlzaWJpbGl0eToiK2QpfX1mdW5jdGlvbiBOKGEpe3JldHVy bi9bXFxcIjw+XC47XS8uZXhlYyhhKSE9bnVsbCYmdHlwZW9mIGVuY29kZVVSSUNv bXBvbmVudCE9bj9lbmNvZGVVUklDb21wb25lbnQoYSk6YX12YXIgbj0idW5kZWZp bmVkIixzPSJvYmplY3QiLEM9ImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNo IiwKTD0iU1dGT2JqZWN0RXhwckluc3QiLHA9d2luZG93LGw9ZG9jdW1lbnQsdj1u YXZpZ2F0b3IsTz0hMSxCPVtmdW5jdGlvbigpe08/aCgpOmUoKX1dLHU9W10sRz1b XSx6PVtdLEEsRixILEssdz0hMSxFPSExLHQsSSxNPSEwLGo9ZnVuY3Rpb24oKXt2 YXIgYT10eXBlb2YgbC5nZXRFbGVtZW50QnlJZCE9biYmdHlwZW9mIGwuZ2V0RWxl bWVudHNCeVRhZ05hbWUhPW4mJnR5cGVvZiBsLmNyZWF0ZUVsZW1lbnQhPW4sYz12 LnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLGQ9di5wbGF0Zm9ybS50b0xvd2VyQ2Fz ZSgpLGI9ZD8vd2luLy50ZXN0KGQpOi93aW4vLnRlc3QoYyk7ZD1kPy9tYWMvLnRl c3QoZCk6L21hYy8udGVzdChjKTtjPS93ZWJraXQvLnRlc3QoYyk/cGFyc2VGbG9h dChjLnJlcGxhY2UoL14uKndlYmtpdFwvKFxkKyhcLlxkKyk/KS4qJC8sIiQxIikp OiExO3ZhciBpPSExLGU9WzAsMCwwXSxrPW51bGw7aWYodHlwZW9mIHYucGx1Z2lu cyE9biYmdHlwZW9mIHYucGx1Z2luc1siU2hvY2t3YXZlIEZsYXNoIl09PQpzKXtp Zigoaz12LnBsdWdpbnNbIlNob2Nrd2F2ZSBGbGFzaCJdLmRlc2NyaXB0aW9uKSYm ISh0eXBlb2Ygdi5taW1lVHlwZXMhPW4mJnYubWltZVR5cGVzW0NdJiYhdi5taW1l VHlwZXNbQ10uZW5hYmxlZFBsdWdpbikpTz0hMCxpPSExLGs9ay5yZXBsYWNlKC9e LipccysoXFMrXHMrXFMrJCkvLCIkMSIpLGVbMF09cGFyc2VJbnQoay5yZXBsYWNl KC9eKC4qKVwuLiokLywiJDEiKSwxMCksZVsxXT1wYXJzZUludChrLnJlcGxhY2Uo L14uKlwuKC4qKVxzLiokLywiJDEiKSwxMCksZVsyXT0vW2EtekEtWl0vLnRlc3Qo ayk/cGFyc2VJbnQoay5yZXBsYWNlKC9eLipbYS16QS1aXSsoLiopJC8sIiQxIiks MTApOjB9ZWxzZSBpZih0eXBlb2YgcC5BY3RpdmVYT2JqZWN0IT1uKXRyeXt2YXIg Zj1uZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxh c2giKTtpZihmJiYoaz1mLkdldFZhcmlhYmxlKCIkdmVyc2lvbiIpKSlpPSEwLGs9 ay5zcGxpdCgiICIpWzFdLnNwbGl0KCIsIiksCmU9W3BhcnNlSW50KGtbMF0sMTAp LHBhcnNlSW50KGtbMV0sMTApLHBhcnNlSW50KGtbMl0sMTApXX1jYXRjaChnKXt9 cmV0dXJue3czOmEscHY6ZSx3azpjLGllOmksd2luOmIsbWFjOmR9fSgpOyhmdW5j dGlvbigpe2oudzMmJigodHlwZW9mIGwucmVhZHlTdGF0ZSE9biYmbC5yZWFkeVN0 YXRlPT0iY29tcGxldGUifHx0eXBlb2YgbC5yZWFkeVN0YXRlPT1uJiYobC5nZXRF bGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdfHxsLmJvZHkpKSYmYigpLHd8fCh0 eXBlb2YgbC5hZGRFdmVudExpc3RlbmVyIT1uJiZsLmFkZEV2ZW50TGlzdGVuZXIo IkRPTUNvbnRlbnRMb2FkZWQiLGIsITEpLGouaWUmJmoud2luJiYobC5hdHRhY2hF dmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixmdW5jdGlvbigpe2wucmVhZHlTdGF0 ZT09ImNvbXBsZXRlIiYmKGwuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5n ZSIsYXJndW1lbnRzLmNhbGxlZSksYigpKX0pLHA9PXRvcCYmZnVuY3Rpb24oKXtp Zighdyl7dHJ5e2wuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0 Y2goYSl7c2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLAowKTtyZXR1cm59Yigp fX0oKSksai53ayYmZnVuY3Rpb24oKXt3fHwoL2xvYWRlZHxjb21wbGV0ZS8udGVz dChsLnJlYWR5U3RhdGUpP2IoKTpzZXRUaW1lb3V0KGFyZ3VtZW50cy5jYWxsZWUs MCkpfSgpLGYoYikpKX0pKCk7KGZ1bmN0aW9uKCl7ai5pZSYmai53aW4mJndpbmRv dy5hdHRhY2hFdmVudCgib251bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPXou bGVuZ3RoLGM9MDtjPGE7YysrKXpbY11bMF0uZGV0YWNoRXZlbnQoeltjXVsxXSx6 W2NdWzJdKTthPUcubGVuZ3RoO2ZvcihjPTA7YzxhO2MrKylyKEdbY10pO2Zvcih2 YXIgZCBpbiBqKWpbZF09bnVsbDtqPW51bGw7Zm9yKHZhciBiIGluIHN3Zm9iamVj dClzd2ZvYmplY3RbYl09bnVsbDtzd2ZvYmplY3Q9bnVsbH0pfSkoKTtyZXR1cm57 cmVnaXN0ZXJPYmplY3Q6ZnVuY3Rpb24oYSxjLGQsYil7aWYoai53MyYmYSYmYyl7 dmFyIGk9e307aS5pZD1hO2kuc3dmVmVyc2lvbj1jO2kuZXhwcmVzc0luc3RhbGw9 ZDtpLmNhbGxiYWNrRm49CmI7dVt1Lmxlbmd0aF09aTt5KGEsITEpfWVsc2UgYiYm Yih7c3VjY2VzczohMSxpZDphfSl9LGdldE9iamVjdEJ5SWQ6ZnVuY3Rpb24oYSl7 aWYoai53MylyZXR1cm4gbShhKX0sZW1iZWRTV0Y6ZnVuY3Rpb24oZCxiLGksZSxm LHIsaCxsLHEseCl7dmFyIG09e3N1Y2Nlc3M6ITEsaWQ6Yn07ai53MyYmIShqLndr JiZqLndrPDMxMikmJmQmJmImJmkmJmUmJmY/KHkoYiwhMSksZyhmdW5jdGlvbigp e2krPSIiO2UrPSIiO3ZhciBnPXt9O2lmKHEmJnR5cGVvZiBxPT09cylmb3IodmFy IGogaW4gcSlnW2pdPXFbal07Zy5kYXRhPWQ7Zy53aWR0aD1pO2cuaGVpZ2h0PWU7 aj17fTtpZihsJiZ0eXBlb2YgbD09PXMpZm9yKHZhciBvIGluIGwpaltvXT1sW29d O2lmKGgmJnR5cGVvZiBoPT09cylmb3IodmFyIHAgaW4gaCl0eXBlb2Ygai5mbGFz aHZhcnMhPW4/ai5mbGFzaHZhcnMrPSImIitwKyI9IitoW3BdOmouZmxhc2h2YXJz PXArIj0iK2hbcF07aWYoRChmKSlvPWsoZyxqLGIpLGcuaWQ9PQpiJiZ5KGIsITAp LG0uc3VjY2Vzcz0hMCxtLnJlZj1vO2Vsc2UgaWYociYmYSgpKXtnLmRhdGE9cjtj KGcsaixiLHgpO3JldHVybn1lbHNlIHkoYiwhMCk7eCYmeChtKX0pKTp4JiZ4KG0p fSxzd2l0Y2hPZmZBdXRvSGlkZVNob3c6ZnVuY3Rpb24oKXtNPSExfSx1YTpqLGdl dEZsYXNoUGxheWVyVmVyc2lvbjpmdW5jdGlvbigpe3JldHVybnttYWpvcjpqLnB2 WzBdLG1pbm9yOmoucHZbMV0scmVsZWFzZTpqLnB2WzJdfX0saGFzRmxhc2hQbGF5 ZXJWZXJzaW9uOkQsY3JlYXRlU1dGOmZ1bmN0aW9uKGEsYyxkKXtpZihqLnczKXJl dHVybiBrKGEsYyxkKX0sc2hvd0V4cHJlc3NJbnN0YWxsOmZ1bmN0aW9uKGQsYixp LGUpe2oudzMmJmEoKSYmYyhkLGIsaSxlKX0scmVtb3ZlU1dGOmZ1bmN0aW9uKGEp e2oudzMmJnIoYSl9LGNyZWF0ZUNTUzpmdW5jdGlvbihhLGMsZCxiKXtqLnczJiZv KGEsYyxkLGIpfSxhZGREb21Mb2FkRXZlbnQ6ZyxhZGRMb2FkRXZlbnQ6ZixnZXRR dWVyeVBhcmFtVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGM9CmwubG9jYXRpb24uc2Vh cmNofHxsLmxvY2F0aW9uLmhhc2g7aWYoYyl7L1w/Ly50ZXN0KGMpJiYoYz1jLnNw bGl0KCI/IilbMV0pO2lmKGE9PW51bGwpcmV0dXJuIE4oYyk7Yz1jLnNwbGl0KCIm Iik7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspaWYoY1tkXS5zdWJzdHJpbmco MCxjW2RdLmluZGV4T2YoIj0iKSk9PWEpcmV0dXJuIE4oY1tkXS5zdWJzdHJpbmco Y1tkXS5pbmRleE9mKCI9IikrMSkpfXJldHVybiIifSxleHByZXNzSW5zdGFsbENh bGxiYWNrOmZ1bmN0aW9uKCl7aWYoRSl7dmFyIGE9cShMKTtpZihhJiZBKXthLnBh cmVudE5vZGUucmVwbGFjZUNoaWxkKEEsYSk7aWYoRiYmKHkoRiwhMCksai5pZSYm ai53aW4pKUEuc3R5bGUuZGlzcGxheT0iYmxvY2siO0gmJkgoSyl9RT0hMX19fX0o KTt2YXIgX2VjX2hpc3Rvcnk9MCxfZWNfdGVzdHM9MzAsX2VjX2RlYnVnPTA7ZnVu Y3Rpb24gX2VjX2R1bXAoYixnKXt2YXIgZj0iIjtnfHwoZz0wKTtmb3IodmFyIGg9 IiIsZT0wO2U8ZysxO2UrKyloKz0iICAgICI7aWYodHlwZW9mIGI9PSJvYmplY3Qi KWZvcih2YXIgbSBpbiBiKWU9YlttXSx0eXBlb2YgZT09Im9iamVjdCI/KGYrPWgr IiciK20rIicgLi4uXG4iLGYrPV9lY19kdW1wKGUsZysxKSk6Zis9aCsiJyIrbSsi JyA9PiBcIiIrZSsnIlxuJztlbHNlIGY9Ij09PT4iK2IrIjw9PT0oIit0eXBlb2Yg YisiKSI7cmV0dXJuIGZ9CmZ1bmN0aW9uIF9lY19yZXBsYWNlKGIsZyxmKXtpZihi LmluZGV4T2YoIiYiK2crIj0iKT4tMXx8Yi5pbmRleE9mKGcrIj0iKT09MCl7dmFy IGg9Yi5pbmRleE9mKCImIitnKyI9Iik7aD09LTEmJihoPWIuaW5kZXhPZihnKyI9 IikpO3ZhciBlPWIuaW5kZXhPZigiJiIsaCsxKTtyZXR1cm4gZSE9LTE/Yi5zdWJz dHIoMCxoKStiLnN1YnN0cihlKyhoPzA6MSkpKyImIitnKyI9IitmOmIuc3Vic3Ry KDAsaCkrIiYiK2crIj0iK2Z9ZWxzZSByZXR1cm4gYisiJiIrZysiPSIrZn12YXIg X2dsb2JhbF9sc287ZnVuY3Rpb24gX19fc2NfdHJhY2tlcl9mbGFzaF92YXIoYil7 X2dsb2JhbF9sc289YjsoYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2N0ciIp KSYmYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYil9CnZh ciBfX3NjX3RyYWNrZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2xhc3M9ZnVu Y3Rpb24oKXt2YXIgYj10aGlzO3RoaXMuX2VjPXt9O3RoaXMuc3RhdGljX3Jlcz10 aGlzLnJlc291cmNlcz0iIjt0aGlzLl9yZWFkeV9zdGF0ZT1mdW5jdGlvbihhKXtk b2N1bWVudC5yZWFkeVN0YXRlPT0iaW50ZXJhY3RpdmUifHxkb2N1bWVudC5yZWFk eVN0YXRlPT0iY29tcGxldGUiP2EoKTp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcj93 aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsYSwhMSk6 ZG9jdW1lbnQub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ZG9jdW1lbnQu cmVhZHlTdGF0ZT09ImludGVyYWN0aXZlIiYmYSgpfX07dGhpcy5fbGlzdGVuX2V2 ZW50PWZ1bmN0aW9uKGEsYyxkKXthLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVu dExpc3RlbmVyKGMsZCwhMSk6YS5hdHRhY2hFdmVudD9hLmF0dGFjaEV2ZW50KCJv biIrYyxkKTphWyJvbiIrY109ZH07CnRoaXMuZ2V0PWZ1bmN0aW9uKGEsYyxkKXti Ll9yZWFkeV9zdGF0ZShmdW5jdGlvbigpe2IuX19fc2NfdHJhY2tlcihhLGMsdm9p ZCAwLHZvaWQgMCxkKX0pfTt0aGlzLnNldD1mdW5jdGlvbihhLGMpe2IuX3JlYWR5 X3N0YXRlKGZ1bmN0aW9uKCl7Yi5fX19zY190cmFja2VyKGEsZnVuY3Rpb24oKXt9 LGMpfSl9O3RoaXMuX19fc2NfdHJhY2tlcj1mdW5jdGlvbihhLGMsZCxpLGUpe3R5 cGVvZiBiLl9fX3NjX3RyYWNrZXI9PSJ1bmRlZmluZWQiJiYoYj10aGlzKTt0eXBl b2YgaT09InVuZGVmaW5lZCImJihpPTApO2lmKGk9PTAmJihiLl9fc2NfdHJhY2tl cl9kYXRhYmFzZV9zdG9yYWdlKGEsZCksYi5zZXRfY29va2llKGEsZCxmdW5jdGlv bigpe30pLGIuX19zY190cmFja2VyX2xzbyhhLGQpLGIuX2VjLnVzZXJEYXRhPWIu X19zY190cmFja2VyX3VzZXJkYXRhKGEsZCksYi5fZWMuY29va2llRGF0YT1iLl9f c2NfdHJhY2tlcl9jb29raWUoYSxkKSxiLl9lYy5sb2NhbERhdGE9Yi5fX3NjX3Ry YWNrZXJfbG9jYWxfc3RvcmFnZShhLApkKSxiLl9lYy5nbG9iYWxEYXRhPWIuX19z Y190cmFja2VyX2dsb2JhbF9zdG9yYWdlKGEsZCksYi5fZWMuc2Vzc2lvbkRhdGE9 Yi5fX3NjX3RyYWNrZXJfc2Vzc2lvbl9zdG9yYWdlKGEsZCksYi5fZWMud2luZG93 RGF0YT1iLl9fc2NfdHJhY2tlcl93aW5kb3coYSxkKSxfZWNfaGlzdG9yeSkpYi5f ZWMuaGlzdG9yeURhdGE9Yi5fX3NjX3RyYWNrZXJfaGlzdG9yeShhLGQpO2lmKHR5 cGVvZiBkIT0idW5kZWZpbmVkIil0eXBlb2YgX2dsb2JhbF9sc289PSJ1bmRlZmlu ZWQiJiZpKys8X2VjX3Rlc3RzJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5fX19z Y190cmFja2VyKGEsYyxkLGksZSl9LDMwMCk7ZWxzZSBpZigod2luZG93Lm9wZW5E YXRhYmFzZSYmdHlwZW9mIGIuX2VjLmRiRGF0YT09InVuZGVmaW5lZCJ8fHR5cGVv ZiBfZ2xvYmFsX2xzbz09InVuZGVmaW5lZCIpJiZpKys8X2VjX3Rlc3RzKXNldFRp bWVvdXQoZnVuY3Rpb24oKXtiLl9fX3NjX3RyYWNrZXIoYSxjLGQsaSxlKX0sCjMw MCk7ZWxzZXtiLl9lYy5sc29EYXRhPWIuZ2V0RnJvbVN0cihhLF9nbG9iYWxfbHNv KTtfZ2xvYmFsX2xzbz12b2lkIDA7Yi5fZWMuc2xEYXRhPWIuZ2V0RnJvbVN0cihh LF9nbG9iYWxfaXNvbGF0ZWQpO19nbG9iYWxfaXNvbGF0ZWQ9dm9pZCAwO3ZhciBm PWIuX2VjO2IuX2VjPXt9O3ZhciBnPVtdLGg9MCxtLG87Zm9yKG8gaW4gZil0eXBl b2YgZltvXSE9InVuZGVmaW5lZCImJnR5cGVvZiBmW29dIT0ibnVsbCImJmZbb10h PSIiJiZmW29dIT0ibnVsbCImJmZbb10hPSJ1bmRlZmluZWQiJiZmW29dIT1udWxs JiYoZ1tmW29dXT10eXBlb2YgZ1tmW29dXT09InVuZGVmaW5lZCI/MTpnW2Zbb11d KzEpO2ZvcihvIGluIGcpZ1tvXT5oJiYoaD1nW29dLG09byk7KHR5cGVvZiBlPT0i dW5kZWZpbmVkInx8ZSE9MSkmJmIuc2V0KGEsbSk7dHlwZW9mIGM9PSJmdW5jdGlv biImJmMobSxmKX19O3RoaXMuc2V0X2Nvb2tpZT1mdW5jdGlvbihhLGMsZCl7aWYo dHlwZW9mIGMhPSJ1bmRlZmluZWQiKXt2YXIgaT0KbmV3IEltYWdlO2kuc3R5bGUu dmlzaWJpbGl0eT0iaGlkZGVuIjtpLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7 aS5zcmM9dGhpcy5yZXNvdXJjZXMrInByZXAucGhwP25hbWU9IithKyImdmFsdWU9 IitjO2IuX2xpc3Rlbl9ldmVudChpLCJsb2FkIixkKX1lbHNlIGIuX2VjLmNvb2tp ZTNwRGF0YT12b2lkIDAsYi5nZXRfanMoYi5yZXNvdXJjZXMrInNjdHJfY29va2ll LnBocD9uYW1lPSIrYSxmdW5jdGlvbihhKXtiLl9lYy5jb29raWUzcERhdGE9YX0p fTt0aGlzLl9fc2NfdHJhY2tlcl93aW5kb3c9ZnVuY3Rpb24oYSxjKXt0cnl7aWYo dHlwZW9mIGMhPSJ1bmRlZmluZWQiKXdpbmRvdy5uYW1lPV9lY19yZXBsYWNlKHdp bmRvdy5uYW1lLGEsYyk7ZWxzZSByZXR1cm4gdGhpcy5nZXRGcm9tU3RyKGEsd2lu ZG93Lm5hbWUpfWNhdGNoKGQpe319O3RoaXMuX19zY190cmFja2VyX3VzZXJkYXRh PWZ1bmN0aW9uKGEsYyl7dHJ5e3ZhciBkPXRoaXMuY3JlYXRlRWxlbSgiZGl2Iiwi dXNlcmRhdGFfZWwiLAoxKTtkLnN0eWxlLmJlaGF2aW9yPSJ1cmwoI2RlZmF1bHQj dXNlckRhdGEpIjtpZih0eXBlb2YgYyE9InVuZGVmaW5lZCIpZC5zZXRBdHRyaWJ1 dGUoYSxjKSxkLnNhdmUoYSk7ZWxzZSByZXR1cm4gZC5sb2FkKGEpLGQuZ2V0QXR0 cmlidXRlKGEpfWNhdGNoKGIpe319O3RoaXMuZ2V0X2pzPWZ1bmN0aW9uKGEsYyl7 dmFyIGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxi PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2IudHlwZT0idGV4dC9q YXZhc2NyaXB0IjtiLnNyYz1hO2Iub25sb2FkPWZ1bmN0aW9uKCl7YygpfTtkLmFw cGVuZENoaWxkKGIpfTt0aGlzLl9fc2NfdHJhY2tlcl9sc289ZnVuY3Rpb24oYSxj KXt2YXIgZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3dmY29udGFpbmVyIik7 ZHx8KGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5zZXRBdHRyaWJ1 dGUoImlkIiwic3dmY29udGFpbmVyIiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls ZChkKSk7CmQ9e307aWYodHlwZW9mIGMhPSJ1bmRlZmluZWQiKWQuZXZlcmRhdGE9 YSsiPSIrYzt2YXIgYj17fTtiLnN3bGl2ZWNvbm5lY3Q9InRydWUiO2IuYWxsb3dz Y3JpcHRhY2Nlc3M9ImFsd2F5cyI7dmFyIGU9e307ZS5pZD0ic2N0ciI7ZS5uYW1l PSJzY3RyIjtzd2ZvYmplY3QuZW1iZWRTV0YodGhpcy5zdGF0aWNfcmVzKyJzY3Ry LnN3ZiIsInN3ZmNvbnRhaW5lciIsIjEiLCIxIiwiOS4wLjAiLCExLGQsYixlKX07 dGhpcy5fX3NjX3RyYWNrZXJfcG5nPWZ1bmN0aW9uKGEsYyl7aWYoZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dClpZih0eXBlb2YgYyE9 InVuZGVmaW5lZCIpe3ZhciBkPW5ldyBJbWFnZTtkLnN0eWxlLnZpc2liaWxpdHk9 ImhpZGRlbiI7ZC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO2Quc3JjPXRoaXMu cmVzb3VyY2VzKyJzY3RyX3BuZy5waHA/bmFtZT0iK2F9ZWxzZXtiLl9lYy5wbmdE YXRhPXZvaWQgMDt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMi KTsKaS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iO2kuc3R5bGUucG9zaXRpb249 ImFic29sdXRlIjtpLndpZHRoPTIwMDtpLmhlaWdodD0xO3ZhciBlPWkuZ2V0Q29u dGV4dCgiMmQiKSxmPXRoaXMuZ2V0RnJvbVN0cigic2N0cl9wbmciLGRvY3VtZW50 LmNvb2tpZSk7ZG9jdW1lbnQuY29va2llPSJzY3RyX3BuZz07IGV4cGlyZXM9TW9u LCAyMCBTZXAgMjAxMCAwMDowMDowMCBVVEM7IHBhdGg9LyI7ZD1uZXcgSW1hZ2U7 ZC5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iO2Quc3R5bGUucG9zaXRpb249ImFi c29sdXRlIjtkLnNyYz10aGlzLnJlc291cmNlcysic2N0cl9wbmcucGhwP25hbWU9 IithO2Qub25sb2FkPWZ1bmN0aW9uKCl7ZG9jdW1lbnQuY29va2llPSJzY3RyX3Bu Zz0iK2YrIjsgZXhwaXJlcz1UdWUsIDMxIERlYyAyMDMwIDAwOjAwOjAwIFVUQzsg cGF0aD0vIjtiLl9lYy5wbmdEYXRhPSIiO2UuZHJhd0ltYWdlKGQsMCwwKTtmb3Io dmFyIGE9ZS5nZXRJbWFnZURhdGEoMCwwLAoyMDAsMSkuZGF0YSxjPTAsaT1hLmxl bmd0aDtjPGk7Yys9NCl7aWYoYVtjXT09MClicmVhaztiLl9lYy5wbmdEYXRhKz1T dHJpbmcuZnJvbUNoYXJDb2RlKGFbY10pO2lmKGFbYysxXT09MClicmVhaztiLl9l Yy5wbmdEYXRhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGFbYysxXSk7aWYoYVtjKzJd PT0wKWJyZWFrO2IuX2VjLnBuZ0RhdGErPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtj KzJdKX19fX07dGhpcy5fX3NjX3RyYWNrZXJfbG9jYWxfc3RvcmFnZT1mdW5jdGlv bihhLGMpe3RyeXtpZih3aW5kb3cubG9jYWxTdG9yYWdlKWlmKHR5cGVvZiBjIT0i dW5kZWZpbmVkIil3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYSxjKTtlbHNl IHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYSl9Y2F0Y2goZCl7 fX07dGhpcy5fX3NjX3RyYWNrZXJfZGF0YWJhc2Vfc3RvcmFnZT1mdW5jdGlvbihh LGMpe2lmKHdpbmRvdy5vcGVuRGF0YWJhc2Upe3ZhciBkPXdpbmRvdy5vcGVuRGF0 YWJhc2UoInNxbGl0ZV9zY3RyIiwKIiIsInNjdHIiLDEwNDg1NzYpO3R5cGVvZiBj IT0idW5kZWZpbmVkIj9kLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKGQpe2QuZXhlY3V0 ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgY2FjaGUoaWQgSU5URUdF UiBOT1QgTlVMTCBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBuYW1lIFRFWFQg Tk9UIE5VTEwsIHZhbHVlIFRFWFQgTk9UIE5VTEwsIFVOSVFVRSAobmFtZSkpIixb XSxmdW5jdGlvbigpe30sZnVuY3Rpb24oKXt9KTtkLmV4ZWN1dGVTcWwoIklOU0VS VCBPUiBSRVBMQUNFIElOVE8gY2FjaGUobmFtZSwgdmFsdWUpIFZBTFVFUyg/LCA/ KSIsW2EsY10sZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7fSl9KTpkLnRyYW5zYWN0 aW9uKGZ1bmN0aW9uKGMpe2MuZXhlY3V0ZVNxbCgiU0VMRUNUIHZhbHVlIEZST00g Y2FjaGUgV0hFUkUgbmFtZT0/IixbYV0sZnVuY3Rpb24oYSxjKXtiLl9lYy5kYkRh dGE9Yy5yb3dzLmxlbmd0aD49MT9jLnJvd3MuaXRlbSgwKS52YWx1ZToiIn0sCmZ1 bmN0aW9uKCl7fSl9KX19O3RoaXMuX19zY190cmFja2VyX3Nlc3Npb25fc3RvcmFn ZT1mdW5jdGlvbihhLGMpe3RyeXtpZih3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpaWYo dHlwZW9mIGMhPSJ1bmRlZmluZWQiKXdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJ dGVtKGEsYyk7ZWxzZSByZXR1cm4gd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0 ZW0oYSl9Y2F0Y2goZCl7fX07dGhpcy5fX3NjX3RyYWNrZXJfZ2xvYmFsX3N0b3Jh Z2U9ZnVuY3Rpb24oYSxjKXtpZih3aW5kb3cuZ2xvYmFsU3RvcmFnZSl7dGhpcy5n ZXRIb3N0KCk7dHJ5e2lmKHR5cGVvZiBjIT0idW5kZWZpbmVkIilldmFsKCJnbG9i YWxTdG9yYWdlW2hvc3RdLiIrYSsiID0gdmFsdWUiKTtlbHNlIHJldHVybiBldmFs KCJnbG9iYWxTdG9yYWdlW2hvc3RdLiIrYSl9Y2F0Y2goZCl7fX19O3RoaXMuX19z Y190cmFja2VyX3NpbHZlcmxpZ2h0PWZ1bmN0aW9uKGEsYyl7dmFyIGQ9IiI7dHlw ZW9mIGMhPSJ1bmRlZmluZWQiJiYKKGQ9JzxwYXJhbSBuYW1lPSJpbml0UGFyYW1z IiB2YWx1ZT0iJythKyI9IitjKyciIC8+Jyk7ZG9jdW1lbnQuYm9keS5pbm5lckhU TUwrPSc8b2JqZWN0IGRhdGE9ImRhdGE6YXBwbGljYXRpb24veC1zaWx2ZXJsaWdo dC0yLCIgdHlwZT0iYXBwbGljYXRpb24veC1zaWx2ZXJsaWdodC0yIiBpZD0ibXlz aWx2ZXJsaWdodCIgd2lkdGg9IjAiIGhlaWdodD0iMCI+JytkKyc8cGFyYW0gbmFt ZT0ic291cmNlIiB2YWx1ZT0ic2N0ci54YXAiLz48cGFyYW0gbmFtZT0ib25Mb2Fk IiB2YWx1ZT0ib25TaWx2ZXJsaWdodExvYWQiLz48cGFyYW0gbmFtZT0ib25FcnJv ciIgdmFsdWU9Im9uU2lsdmVybGlnaHRFcnJvciIvPjxwYXJhbSBuYW1lPSJiYWNr Z3JvdW5kIiB2YWx1ZT0iVHJhbnNwYXJlbnQiLz48cGFyYW0gbmFtZT0id2luZG93 bGVzcyIgdmFsdWU9InRydWUiLz48cGFyYW0gbmFtZT0ibWluUnVudGltZVZlcnNp b24iIHZhbHVlPSI0LjAuNTA0MDEuMCIvPjxwYXJhbSBuYW1lPSJhdXRvVXBncmFk ZSIgdmFsdWU9InRydWUiLz48YSBocmVmPSJodHRwOi8vZ28ubWljcm9zb2Z0LmNv bS9md2xpbmsvP0xpbmtJRD0xNDkxNTYmdj00LjAuNTA0MDEuMCIgc3R5bGU9InRl eHQtZGVjb3JhdGlvbjpub25lIj48aW1nIHNyYz0iaHR0cDovL2dvLm1pY3Jvc29m dC5jb20vZndsaW5rLz9MaW5rSWQ9MTA4MTgxIiBhbHQ9IkdldCBNaWNyb3NvZnQg U2lsdmVybGlnaHQiIHN0eWxlPSJib3JkZXItc3R5bGU6bm9uZSIvPjwvYT48L29i amVjdD4nfTsKdGhpcy5lbmNvZGU9ZnVuY3Rpb24oYSl7dmFyIGM9IiIsZCxiLGUs ZixnLGgsbT0wO2ZvcihhPXRoaXMuX3V0ZjhfZW5jb2RlKGEpO208YS5sZW5ndGg7 KWQ9YS5jaGFyQ29kZUF0KG0rKyksYj1hLmNoYXJDb2RlQXQobSsrKSxlPWEuY2hh ckNvZGVBdChtKyspLGY9ZD4+MixkPShkJjMpPDw0fGI+PjQsZz0oYiYxNSk8PDJ8 ZT4+NixoPWUmNjMsaXNOYU4oYik/Zz1oPTY0OmlzTmFOKGUpJiYoaD02NCksYz1j KyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0 dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGYpKyJBQkNERUZHSElKS0xNTk9Q UVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsv PSIuY2hhckF0KGQpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdo aWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGcpKyJBQkNE RUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6 MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGgpOwpyZXR1cm4gY307dGhpcy5kZWNvZGU9 ZnVuY3Rpb24oYSl7dmFyIGM9IiIsZCxiLGUsZixnLGg9MDtmb3IoYT1hLnJlcGxh Y2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCIiKTtoPGEubGVuZ3RoOylkPSJBQkNE RUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6 MDEyMzQ1Njc4OSsvPSIuaW5kZXhPZihhLmNoYXJBdChoKyspKSxiPSJBQkNERUZH SElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEy MzQ1Njc4OSsvPSIuaW5kZXhPZihhLmNoYXJBdChoKyspKSxmPSJBQkNERUZHSElK S0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1 Njc4OSsvPSIuaW5kZXhPZihhLmNoYXJBdChoKyspKSxnPSJBQkNERUZHSElKS0xN Tk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4 OSsvPSIuaW5kZXhPZihhLmNoYXJBdChoKyspKSxkPWQ8PDJ8Yj4+NCxiPShiJjE1 KTw8CjR8Zj4+MixlPShmJjMpPDw2fGcsYys9U3RyaW5nLmZyb21DaGFyQ29kZShk KSxmIT02NCYmKGMrPVN0cmluZy5mcm9tQ2hhckNvZGUoYikpLGchPTY0JiYoYys9 U3RyaW5nLmZyb21DaGFyQ29kZShlKSk7cmV0dXJuIGM9dGhpcy5fdXRmOF9kZWNv ZGUoYyl9O3RoaXMuX3V0ZjhfZW5jb2RlPWZ1bmN0aW9uKGEpe2E9YS5yZXBsYWNl KC9cclxuL2csIlxuIik7Zm9yKHZhciBjPSIiLGQ9MDtkPGEubGVuZ3RoO2QrKyl7 dmFyIGI9YS5jaGFyQ29kZUF0KGQpO2I8MTI4P2MrPVN0cmluZy5mcm9tQ2hhckNv ZGUoYik6KGI+MTI3JiZiPDIwNDg/Yys9U3RyaW5nLmZyb21DaGFyQ29kZShiPj42 fDE5Mik6KGMrPVN0cmluZy5mcm9tQ2hhckNvZGUoYj4+MTJ8MjI0KSxjKz1TdHJp bmcuZnJvbUNoYXJDb2RlKGI+PjYmNjN8MTI4KSksYys9U3RyaW5nLmZyb21DaGFy Q29kZShiJjYzfDEyOCkpfXJldHVybiBjfTt0aGlzLl91dGY4X2RlY29kZT1mdW5j dGlvbihhKXtmb3IodmFyIGM9IiIsYj0wLAplPTAsZj0wLGc9MDtiPGEubGVuZ3Ro OyllPWEuY2hhckNvZGVBdChiKSxlPDEyOD8oYys9U3RyaW5nLmZyb21DaGFyQ29k ZShlKSxiKyspOmU+MTkxJiZlPDIyND8oZj1hLmNoYXJDb2RlQXQoYisxKSxjKz1T dHJpbmcuZnJvbUNoYXJDb2RlKChlJjMxKTw8NnxmJjYzKSxiKz0yKTooZj1hLmNo YXJDb2RlQXQoYisxKSxnPWEuY2hhckNvZGVBdChiKzIpLGMrPVN0cmluZy5mcm9t Q2hhckNvZGUoKGUmMTUpPDwxMnwoZiY2Myk8PDZ8ZyY2MyksYis9Myk7cmV0dXJu IGN9O3RoaXMuX19zY190cmFja2VyX2hpc3Rvcnk9ZnVuY3Rpb24oYSxjKXt2YXIg Yj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJz dHV2d3h5ejAxMjM0NTY3ODkrLz0tIi5zcGxpdCgiIiksZT0iaHR0cDovL3d3dy5n b29nbGUuY29tL3NjdHIvY2FjaGUvIit0aGlzLmdldEhvc3QoKSsiLyIrYTtpZih0 eXBlb2YgYyE9InVuZGVmaW5lZCIpe2lmKCF0aGlzLmhhc1Zpc2l0ZWQoZSkpe3Ro aXMuY3JlYXRlSWZyYW1lKGUsCiJpZiIpO2UrPSIvIjtiPXRoaXMuZW5jb2RlKGMp LnNwbGl0KCIiKTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyllKz1iW2ZdLHRo aXMuY3JlYXRlSWZyYW1lKGUsImlmIitmKTtlKz0iLSI7dGhpcy5jcmVhdGVJZnJh bWUoZSwiaWZfIil9fWVsc2UgaWYodGhpcy5oYXNWaXNpdGVkKGUpKXtlKz0iLyI7 Zm9yKHZhciBnPSIiLGg9IiIsbT0xO2chPSItIiYmbT09MTspZm9yKGY9bT0wO2Y8 Yi5sZW5ndGg7ZisrKWlmKHRoaXMuaGFzVmlzaXRlZChlK2JbZl0pKXtnPWJbZl07 ZyE9Ii0iJiYoaCs9Zyk7ZSs9ZzttPTE7YnJlYWt9cmV0dXJuIHRoaXMuZGVjb2Rl KGgpfX07dGhpcy5jcmVhdGVFbGVtPWZ1bmN0aW9uKGEsYyxiKXthPXR5cGVvZiBj IT0idW5kZWZpbmVkIiYmZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYyk/ZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoYyk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChhKTth LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7YS5zdHlsZS5wb3NpdGlvbj0KImFi c29sdXRlIjtjJiZhLnNldEF0dHJpYnV0ZSgiaWQiLGMpO2ImJmRvY3VtZW50LmJv ZHkuYXBwZW5kQ2hpbGQoYSk7cmV0dXJuIGF9O3RoaXMuY3JlYXRlSWZyYW1lPWZ1 bmN0aW9uKGEsYyl7dmFyIGI9dGhpcy5jcmVhdGVFbGVtKCJpZnJhbWUiLGMsMSk7 Yi5zZXRBdHRyaWJ1dGUoInNyYyIsYSk7cmV0dXJuIGJ9O3RoaXMud2FpdEZvclN3 Zj1mdW5jdGlvbihhKXt0eXBlb2YgYT09InVuZGVmaW5lZCI/YT0wOmErKzthPF9l Y190ZXN0cyYmdHlwZW9mIHN3Zm9iamVjdD09InVuZGVmaW5lZCImJnNldFRpbWVv dXQoZnVuY3Rpb24oKXt0aGlzLndhaXRGb3JTd2YoYSl9LDMwMCl9O3RoaXMuX19z Y190cmFja2VyX2Nvb2tpZT1mdW5jdGlvbihhLGMpe2lmKHR5cGVvZiBjIT0idW5k ZWZpbmVkIilkb2N1bWVudC5jb29raWU9YSsiPTsgZXhwaXJlcz1Nb24sIDIwIFNl cCAyMDEwIDAwOjAwOjAwIFVUQzsgcGF0aD0vIixkb2N1bWVudC5jb29raWU9YSsi PSIrYysiOyBleHBpcmVzPVR1ZSwgMzEgRGVjIDIwMzAgMDA6MDA6MDAgVVRDOyBw YXRoPS8iOwplbHNlIHJldHVybiB0aGlzLmdldEZyb21TdHIoYSxkb2N1bWVudC5j b29raWUpfTt0aGlzLmdldEZyb21TdHI9ZnVuY3Rpb24oYSxjKXtpZih0eXBlb2Yg Yz09InN0cmluZyIpZm9yKHZhciBiPWErIj0iLGU9Yy5zcGxpdCgvWzsmXS8pLGY9 MDtmPGUubGVuZ3RoO2YrKyl7Zm9yKHZhciBnPWVbZl07Zy5jaGFyQXQoMCk9PSIg IjspZz1nLnN1YnN0cmluZygxLGcubGVuZ3RoKTtpZihnLmluZGV4T2YoYik9PTAp cmV0dXJuIGcuc3Vic3RyaW5nKGIubGVuZ3RoLGcubGVuZ3RoKX19O3RoaXMuZ2V0 SG9zdD1mdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmxvY2F0aW9uLmhvc3Q7YS5p bmRleE9mKCJ3d3cuIik9PTAmJihhPWEucmVwbGFjZSgid3d3LiIsIiIpKTtyZXR1 cm4gYX07dGhpcy50b0hleD1mdW5jdGlvbihhKXtmb3IodmFyIGM9IiIsYj1hLmxl bmd0aCxlPTAsZjtlPGI7KXtmb3IoZj1hLmNoYXJDb2RlQXQoZSsrKS50b1N0cmlu ZygxNik7Zi5sZW5ndGg8MjspZj0iMCIrZjtjKz0KZn1yZXR1cm4gY307dGhpcy5m cm9tSGV4PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYz0iIixiPWEubGVuZ3RoLGU7Yj49 MDspZT1iLTIsYz1TdHJpbmcuZnJvbUNoYXJDb2RlKCIweCIrYS5zdWJzdHJpbmco ZSxiKSkrYyxiPWU7cmV0dXJuIGN9O3RoaXMuaGFzVmlzaXRlZD1mdW5jdGlvbihh KXtpZih0aGlzLm5vX2NvbG9yPT0tMSYmdGhpcy5fZ2V0UkdCKCJodHRwOi8vbGtq aGV3cmFveWxraGpuc2RhZmtob2l5cndlNTgwNzM2YmpzZGd1eW9pcndldHIuY29t IiwtMSk9PS0xKXRoaXMubm9fY29sb3I9dGhpcy5fZ2V0UkdCKCJodHRwOi8vZmdk Z2RmZ3R5LSIrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTkpKyJkZmdl cnl0ZGZnLmNvbSIpO2lmKGEuaW5kZXhPZigiaHR0cHM6Iik9PTB8fGEuaW5kZXhP ZigiaHR0cDoiKT09MClyZXR1cm4gdGhpcy5fdGVzdFVSTChhLHRoaXMubm9fY29s b3IpO3JldHVybiB0aGlzLl90ZXN0VVJMKCJodHRwOi8vIithLHRoaXMubm9fY29s b3IpfHwKdGhpcy5fdGVzdFVSTCgiaHR0cHM6Ly8iK2EsdGhpcy5ub19jb2xvcil8 fHRoaXMuX3Rlc3RVUkwoImh0dHA6Ly93d3cuIithLHRoaXMubm9fY29sb3IpfHx0 aGlzLl90ZXN0VVJMKCJodHRwczovL3d3dy4iK2EsdGhpcy5ub19jb2xvcil9O3Zh ciBnPXRoaXMuY3JlYXRlRWxlbSgiYSIsIl9lY19yZ2JfbGluayIpLGY7dHJ5e2Y9 MTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2lmKGguc3R5 bGVTaGVldCloLnN0eWxlU2hlZXQuaW5uZXJIVE1MPSIjX2VjX3JnYl9saW5rOnZp c2l0ZWR7ZGlzcGxheTpub25lO2NvbG9yOiNGRjAwMDB9IjtlbHNlIGlmKGguaW5u ZXJIVE1MKWguaW5uZXJIVE1MPSIjX2VjX3JnYl9saW5rOnZpc2l0ZWR7ZGlzcGxh eTpub25lO2NvbG9yOiNGRjAwMDB9IjtlbHNle3ZhciBlPWRvY3VtZW50LmNyZWF0 ZVRleHROb2RlKCIjX2VjX3JnYl9saW5rOnZpc2l0ZWR7ZGlzcGxheTpub25lO2Nv bG9yOiNGRjAwMDB9Iik7aC5hcHBlbmRDaGlsZChlKX19Y2F0Y2gobSl7Zj0KMH10 aGlzLl9nZXRSR0I9ZnVuY3Rpb24oYSxiKXtpZihiJiZmPT0wKXJldHVybi0xO2cu aHJlZj1hO2cuaW5uZXJIVE1MPWE7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCho KTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGcpO3JldHVybiBkb2N1bWVudC5k ZWZhdWx0Vmlldz9kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxl KGcsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgiY29sb3IiKTpnLmN1cnJlbnRTdHls ZS5jb2xvcn07dGhpcy5fdGVzdFVSTD1mdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMu X2dldFJHQihhKTtpZihkPT0icmdiKDI1NSwgMCwgMCkifHxkPT0iI2ZmMDAwMCIp cmV0dXJuIDE7ZWxzZSBpZihiJiZkIT1iKXJldHVybiAxO3JldHVybiAwfX19KCks X2dsb2JhbF9pc29sYXRlZDtmdW5jdGlvbiBvblNpbHZlcmxpZ2h0TG9hZChiKXtf Z2xvYmFsX2lzb2xhdGVkPWIuZ2V0SG9zdCgpLkNvbnRlbnQuQXBwLmdldElzb2xh dGVkU3RvcmFnZSgpfQpmdW5jdGlvbiBvblNpbHZlcmxpZ2h0RXJyb3IoKXtfZ2xv YmFsX2lzb2xhdGVkPSIifTt2YXIgc2N0cmFjaz1mdW5jdGlvbihiKXt0aGlzLmJh c2VfdXJsPSJodHRwOi8vdGsuc2V4Y291bnRlci5jb20vMC4zLjAiO3RoaXMucG9z dGJhY2s9dGhpcy5iYXNlX3VybCsiL2xvZyI7dGhpcy5qc191cmw9dGhpcy5iYXNl X3VybCsiL2pzIjt0aGlzLnNpdGU9d2luZG93LmxvY2F0aW9uLmhvc3Q7aWYodHlw ZW9mIGIhPSJ1bmRlZmluZWQiKXRoaXMuYWNjdD1iO3RoaXMudXJsPXdpbmRvdy5s b2NhdGlvbi50b1N0cmluZygpfTtzY3RyYWNrLnByb3RvdHlwZS5nZXRVaWQ9ZnVu Y3Rpb24oYil7dmFyIGc9dGhpcyxmPW5ldyBfX3NjX3RyYWNrZXI7Zi5yZXNvdXJj ZXM9Zy5iYXNlX3VybCsiL3Jlc291cmNlcy8iO2Yuc3RhdGljX3Jlcz1nLmJhc2Vf dXJsKyIvc3RhdGljLyI7Zi5nZXQoIl9fc2N0ciIsZnVuY3Rpb24oaCl7aD09bnVs bCYmKGg9Zy5fZ2VuVWlkKCksZi5zZXQoIl9fc2N0ciIsaCkpO3dpbmRvdy5fX3Nj dHJ1aWQ9aDtiKGgpfSl9OwpzY3RyYWNrLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0 aW9uKGIsZyl7dmFyIGY9IiIsaD0iIjtpZih0eXBlb2YgYj09Im9iamVjdCIpZm9y KHZhciBlIGluIGIpe3ZhciBtPXRoaXMuX2V4cGFuZChiW2VdLGcrIlsiK2VuY29k ZVVSSUNvbXBvbmVudChlKSsiXSIpO20ubGVuZ3RoJiYoZis9aCttLGg9IiYiKX1l bHNlIHR5cGVvZiBiIT0iZnVuY3Rpb24iJiYoZj1nKyI9IitlbmNvZGVVUklDb21w b25lbnQoYikpO3JldHVybiBmfTtzY3RyYWNrLnByb3RvdHlwZS5fY2FsbD1mdW5j dGlvbihiLGcpe3ZhciBmPSI/IjtiLmluZGV4T2YoIj8iKSE9PS0xJiYoZj0iJiIp O2Zvcih2YXIgaCBpbiBnKWIrPWYrdGhpcy5fZXhwYW5kKGdbaF0sZW5jb2RlVVJJ Q29tcG9uZW50KGgpKSxmPSImIjtmPW5ldyBJbWFnZTtmLnN0eWxlLnZpc2liaWxp dHk9ImhpZGRlbiI7Zi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO2Yuc3JjPWJ9 OwpzY3RyYWNrLnByb3RvdHlwZS5sb2dFdmVudD1mdW5jdGlvbihiLGcpe3ZhciBm PXt9O2YudWlkPXdpbmRvdy5fX3NjdHJ1aWQ7Zi5zaXRlPXRoaXMuc2l0ZTtmLmFj Y3Q9dGhpcy5hY2N0O2YudXJsPXRoaXMudXJsO2YubmFtZT1iO2YuZGF0YT1nO3Ro aXMuX2NhbGwodGhpcy5wb3N0YmFjaysiL2V2ZW50IixmKX07c2N0cmFjay5wcm90 b3R5cGUubG9nU2lnbnVwRXZlbnQ9ZnVuY3Rpb24oYixnLGYsaCxlKXt2YXIgbT17 fTttLnVpZD13aW5kb3cuX19zY3RydWlkO20uc2l0ZT10aGlzLnNpdGU7bS5hY2N0 PXRoaXMuYWNjdDttLnVybD10aGlzLnVybDttLnVzZXJpZD1iO20udXNlcm5hbWU9 ZzttLnVzZXJ0eXBlPWY7bS5kYXRhPWU7bS5sb2NhdGlvbj1oO3RoaXMuX2NhbGwo dGhpcy5wb3N0YmFjaysiL3NpZ251cCIsbSl9OwpzY3RyYWNrLnByb3RvdHlwZS5s b2dMb2dpbkV2ZW50PWZ1bmN0aW9uKGIsZyxmLGgpe3ZhciBlPXt9O2UudWlkPXdp bmRvdy5fX3NjdHJ1aWQ7ZS5zaXRlPXRoaXMuc2l0ZTtlLmFjY3Q9dGhpcy5hY2N0 O2UudXJsPXRoaXMudXJsO2UudXNlcmlkPWI7ZS51c2VybmFtZT1nO2UudXNlcnR5 cGU9ZjtlLmRhdGE9aDt0aGlzLl9jYWxsKHRoaXMucG9zdGJhY2srIi9sb2dpbiIs ZSl9O3NjdHJhY2sucHJvdG90eXBlLmxvZ0JpbGxpbmdFdmVudD1mdW5jdGlvbihi LGcsZixoLGUsbSxhKXt2YXIgYz17fTtjLnVpZD13aW5kb3cuX19zY3RydWlkO2Mu c2l0ZT10aGlzLnNpdGU7Yy5hY2N0PXRoaXMuYWNjdDtjLnRyYW5zX3R5cGU9Yjtj Lm9yZGVyaWQ9ZztjLmFtb3VudD1mO2MudXJsPXRoaXMudXJsO2MudXNlcmlkPWg7 Yy51c2VybmFtZT1lO2MudXNlcnR5cGU9bTtjLmRhdGE9YTt0aGlzLl9jYWxsKHRo aXMucG9zdGJhY2srIi9iaWxsaW5nIixjKX07CnNjdHJhY2sucHJvdG90eXBlLmxv Z0JlaGF2aW91cmFsRXZlbnQ9ZnVuY3Rpb24oYixnLGYsaCxlLG0pe3ZhciBhPXt9 O2EudWlkPXdpbmRvdy5fX3NjdHJ1aWQ7YS5zaXRlPXRoaXMuc2l0ZTthLmFjY3Q9 dGhpcy5hY2N0O2EuZXZlbnRfdHlwZT1iO2Eub2JqZWN0X3RpdGxlPWc7YS5rZXl3 b3Jkcz1mO2EuY2F0ZWdvcmllcz1oO2EuY2FzdD1lO2EudXJsPXRoaXMudXJsO2Eu ZGF0YT1tO3RoaXMuX2NhbGwodGhpcy5wb3N0YmFjaysiL2JlaGF2aW91ciIsYSl9 O3NjdHJhY2sucHJvdG90eXBlLmxvZ1RyYWNrRXZlbnQ9ZnVuY3Rpb24oYixnLGYs aCl7dmFyIGU9e307ZS51aWQ9d2luZG93Ll9fc2N0cnVpZDtlLnNpdGU9dGhpcy5z aXRlO2UuYWNjdD10aGlzLmFjY3Q7ZS51cmw9dGhpcy51cmw7ZS51c2VyaWQ9Yjtl LnVzZXJuYW1lPWc7ZS51c2VydHlwZT1mO2UuZGF0YT1oO3RoaXMuX2NhbGwodGhp cy5wb3N0YmFjaysiL3RyYWNrIixlKX07CnNjdHJhY2sucHJvdG90eXBlLl9nZW5V aWQ9ZnVuY3Rpb24oKXtmb3IodmFyIGI9ImFBYkJjQ2REZUVmRmdHaEhpSWpKa0ts TG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZeloxMjM0NTY3ODkwIi5zcGxpdCgi IiksZz0obmV3IERhdGUpLmdldFRpbWUoKSxmPWIubGVuZ3RoLGg9QXJyYXkoMjEp LGU9MDtlPDIxO2UrKyllJTImJmc+MD8oaFtlXT1iW2clZl0sZz1NYXRoLmZsb29y KGcvZikpOmhbZV09YltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZildO3JldHVy biBoLmpvaW4oIiIpfTt3aW5kb3cuc2N0cmFjaz1zY3RyYWNrOw== ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=report_window_close_bar.gif Content-Type: image/gif; name=report_window_close_bar.gif Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/images/report_problem/report_window_close_bar.gif Content-Transfer-Encoding: Base64 R0lGODlhFAASANUAAHZ2dpKSknNzc25ubnt7e3x8fI2NjX9/f5GRkb+/v5SUlIuL i2RkZMPDw7CwsIODg3FxcePj4////8TExNLS0pCRkYaGht/f38vLy1dXV+jo6Fpa WoWFhWxsbI6OjomJiX5+fo2OjtPT06mpqaioqHp6en19fZWVlXJyco+Pj3l5eYCA gISEhIyMjIiIiGlpaZqampiYmGtra5ycnG1tbW9vbwAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAUABIAQAavwMpsSCwaiSGWcsl6WCIR zoO5lFmv2Gw2wO26VCCD4VBydbuAtHrQcggEjtZArY7Z7/h8vsXvL0gaAwMXIwt9 fSaJigUQBRgiBI2KijWVlpeYmDCbnJ2eniehoggtKQoKKS0IoqIprq8uEmMrHhIu r7AuurssFEMULLvCK8TFKwQ0CQkdBMbFKtDRAgwNHykNDALR0Sjd3jUTKt0qEzXe 3jTp6uvs7Bsv8PHy8/EZQQA7 ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=en.gif Content-Type: image/gif; name=en.gif Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/images/lang/en.gif Content-Transfer-Encoding: Base64 R0lGODlhEAALAPcAAKG+/Pv7+zp5+T16+dpjSvn5+WNjtz8/o6LA/GNjuC9z+PHx 8WNlwu/v7z8/djZ0+f7XzvX19f/v7f8eGv2CbUmC+vxoaNhjSrI/L/X18zl2+f/W z/xMTPb29uPj4212q8fU/v8xLl515ANv4f/Au/6JeUBXrP8oKNra095jSv89Pf83 L/v/+vPz8//CwPj49v+plP7KwT9LpbjE/v72+LmhomNjvpOs/OJjSoSd/D9++jd3 +eXr/wRz8aw/L93j/o8/L//X1P+uruvr6/xAQOLi3UN++r6alP/Nxv1/f//S2z8/ aKOr4aiz8r0/L/mJfMXS/5Ss/P8rKP/t8f9pafT09OBjSkaA+puguP81M5u7/Pw4 OD8/cP8uK+7u7v7X0GNnv/+xqgBouf7Z0aOu5py9/ABJtv8aFr9fUOz+/jJ1+D8/ gf+9uf+7teVkSv/u8fT08v/Hw6NJSt7j/r4/L2x2qf80L/9tYf/p6f/k7ERbpf9M SPn5+P9qZ0B8+jBw+Kk/LwNx5aax6l1v2PP1/r7K/v7y8P3g4/6wptRjSvb29Gp+ 7P6AbvxYWPf39v8xMP7+/f+1tD8/a/8mILY/L2NnxAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAQAAsAAAjGACsJrMTARgIDaLB8qFOD 0hE9lSAhYAEgQBk+EAjNoYHIEAgZlRBUuGJkgIAdYXhMoYInSqEDYAAU0BFBQAMF MN70kXAjx4wDDAD4MflAQY89dzYgIdEGAp0EAQYseDAkkIcsdqRMmnCGkQ8DWjSo +TNCjJkTIeKwiSRkjJMiATpUabGggZcVeVQEWSRCkAMKMZJYaMSByJYuUJQ8cjGI DBcUBdK8cKQoA5wSP5ocevKFiSQ3OKykIEDgQiIMJtY4kAME0JKAADs= ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=glider.js Content-Type: application/javascript; charset=UTF-8; name=glider.js Content-Location: http://cdn-small.content.adultcentro.com/web/tmpl/4492/glider.js Content-Transfer-Encoding: Base64 R2xpZGVyID0gQ2xhc3MuY3JlYXRlKCk7DQpPYmplY3QuZXh0ZW5kKE9iamVjdC5l eHRlbmQoR2xpZGVyLnByb3RvdHlwZSwgQWJzdHJhY3QucHJvdG90eXBlKSwgew0K CWluaXRpYWxpemU6IGZ1bmN0aW9uKHdyYXBwZXIsIG9wdGlvbnMpew0KCQl0aGlz LnNjcm9sbGluZyAgPSBmYWxzZTsNCgkJdGhpcy53cmFwcGVyICAgID0gJCh3cmFw cGVyKTsNCgkJdGhpcy5zY3JvbGxlciAgID0gdGhpcy53cmFwcGVyLmRvd24oJ2Rp di5zY3JvbGxlcicpOw0KCQl0aGlzLnNlY3Rpb25zICAgPSB0aGlzLndyYXBwZXIu Z2V0RWxlbWVudHNCeVNlbGVjdG9yKCcuc2VjdGlvbicpOw0KCQl0aGlzLm9wdGlv bnMgICAgPSBPYmplY3QuZXh0ZW5kKHsgZHVyYXRpb246IDEuMCwgZnJlcXVlbmN5 OiAzLCByZXBlYXQ6IGZhbHNlLCBpdGVtczogMSB9LCBvcHRpb25zIHx8IHt9KTsN CgkJDQoJCXZhciBlbGVtV2lkdGggPSAwOw0KCQl0aGlzLnNlY3Rpb25zLmVhY2go IGZ1bmN0aW9uKHNlY3Rpb24sIGluZGV4KSB7DQoJCQlzZWN0aW9uLl9pbmRleCA9 IGluZGV4Ow0KCQkJaWYoIVByb3RvdHlwZS5Ccm93c2VyLklFKXsJDQoJCQkJZWxl bVdpZHRoICs9IHNlY3Rpb24uY2xpZW50V2lkdGg7DQoJCQl9ZWxzZXsNCgkJCQll bGVtV2lkdGggKz0gc2VjdGlvbi5vZmZzZXRXaWR0aDsNCgkJCX0NCgkJfSk7ICAg IA0KCQkNCgkJdGhpcy5zZWN0aW9ucy53aWR0aCA9IGVsZW1XaWR0aDsNCgkJdGhp cy5zY3JvbGxlci53aWR0aCA9IHRoaXMuc2Nyb2xsZXIuY2xpZW50V2lkdGg7DQoJ CXRoaXMuc2Nyb2xsZXIub2ZmU2V0cyA9IFBvc2l0aW9uLmN1bXVsYXRpdmVPZmZz ZXQoJCh0aGlzLnNjcm9sbGVyKSk7DQoJCQ0KCQl0aGlzLmV2ZW50cyA9IHsNCgkJ CWNsaWNrOiB0aGlzLmNsaWNrLmJpbmQodGhpcyksDQoJCQluZXh0OiB0aGlzLm5l eHQuYmluZCh0aGlzKSwNCgkJCXByZXY6IHRoaXMucHJldmlvdXMuYmluZCh0aGlz KQ0KCQl9Ow0KCQkNCgkJdGhpcy5hZGRPYnNlcnZlcnMoKTsNCgkJdGhpcy5oaWdo bGlnaHRMaW5rcygodGhpcy5vcHRpb25zLmluaXRpYWxTZWN0aW9uKSA/IHRoaXMu b3B0aW9ucy5pbml0aWFsU2VjdGlvbi5faW5kZXggOiAwLCB0cnVlKTsNCg0KCQlp ZiAodGhpcy5vcHRpb25zLmluaXRpYWxTZWN0aW9uKSB0aGlzLm1vdmVUbyh0aGlz Lm9wdGlvbnMuaW5pdGlhbFNlY3Rpb24sIHRoaXMuc2Nyb2xsZXIsIHsgZHVyYXRp b246dGhpcy5vcHRpb25zLmR1cmF0aW9uIH0pOw0KCQllbHNlIHRoaXMubW92ZVRv KHRoaXMuc2VjdGlvbnNbMF0sIHRoaXMuc2Nyb2xsZXIsIHsgZHVyYXRpb246IHRo aXMub3B0aW9ucy5kdXJhdGlvbiB9KTsNCg0KCQlpZiAodGhpcy5vcHRpb25zLmF1 dG9HbGlkZSkgdGhpcy5zdGFydCgpOw0KCX0sDQoJDQoJYWRkT2JzZXJ2ZXJzOiBm dW5jdGlvbigpIHsNCgkJdmFyIGNvbnRyb2xzID0gdGhpcy53cmFwcGVyLmdldEVs ZW1lbnRzQnlTZWxlY3RvcignZGl2LmNvbnRyb2xzIGEnKTsNCgkJY29udHJvbHMu aW52b2tlKCdvYnNlcnZlJywgJ2NsaWNrJywgdGhpcy5ldmVudHMuY2xpY2spOw0K CQkNCgkJdGhpcy5uZXh0TGlua3MgPSB0aGlzLndyYXBwZXIudXAoKS5nZXRFbGVt ZW50c0J5U2VsZWN0b3IoJy4nK3RoaXMud3JhcHBlci5pZCsnX25leHQnKTsNCgkJ dGhpcy5uZXh0TGlua3MuaW52b2tlKCdvYnNlcnZlJywgJ2NsaWNrJywgdGhpcy5l dmVudHMubmV4dCk7DQoJCXRoaXMucHJldkxpbmtzID0gdGhpcy53cmFwcGVyLnVw KCkuZ2V0RWxlbWVudHNCeVNlbGVjdG9yKCcuJyt0aGlzLndyYXBwZXIuaWQrJ19w cmV2Jyk7DQoJCXRoaXMucHJldkxpbmtzLmludm9rZSgnb2JzZXJ2ZScsICdjbGlj aycsIHRoaXMuZXZlbnRzLnByZXYpOw0KCX0sDQoJDQoJaGlnaGxpZ2h0TGlua3Mg OiBmdW5jdGlvbihpbmRleCwgZmlyc3Qpew0KCQlpZiAodGhpcy5ub1Njcm9sbGVk KSByZXR1cm47DQoJCWlmIChmaXJzdCAmJiAodGhpcy5zZWN0aW9ucy5sZW5ndGgg PCAxIHx8IHRoaXMuc2VjdGlvbnMud2lkdGggPCB0aGlzLnNjcm9sbGVyLndpZHRo KSkgew0KCQkJdGhpcy5oaWRlTGlua3MoJ2JvdGgnKTsNCgkJCXRoaXMubm9TY3Jv bGxlZCA9IHRydWU7DQoJCX0NCgkJZWxzZSBpZiAodGhpcy5vcHRpb25zLnJlcGVh dCkgew0KCQkJdGhpcy5oaWRlTGlua3MoKTsNCgkJCXRoaXMubm9TY3JvbGxlZCA9 IHRydWU7DQoJCX0NCgkJZWxzZSBpZiAoaW5kZXggPT0gMCkgdGhpcy5oaWRlTGlu a3MoJ3ByZXYnKTsNCgkJZWxzZSBpZiAoaW5kZXggPiB0aGlzLnNlY3Rpb25zLmxl bmd0aC10aGlzLm9wdGlvbnMuaXRlbXMpIHRoaXMuaGlkZUxpbmtzKCduZXh0Jyk7 DQoJCWVsc2UgdGhpcy5oaWRlTGlua3MoKTsNCgl9LA0KCQ0KCWhpZGVMaW5rcyA6 IGZ1bmN0aW9uKGRpcmVjdGlvbikgew0KCQlzd2l0Y2ggKGRpcmVjdGlvbikgew0K CQkJY2FzZSAnYm90aCcgOiB7DQoJCQkJdGhpcy5uZXh0TGlua3MuaW52b2tlKCdy ZW1vdmVDbGFzc05hbWUnLCAnYWN0aXZlJykuaW52b2tlKCdhZGRDbGFzc05hbWUn LCAnaW5hY3RpdmUnKTsNCgkJCQl0aGlzLnByZXZMaW5rcy5pbnZva2UoJ3JlbW92 ZUNsYXNzTmFtZScsICdhY3RpdmUnKS5pbnZva2UoJ2FkZENsYXNzTmFtZScsICdp bmFjdGl2ZScpOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCQljYXNlICduZXh0JyA6IHsN CgkJCQl0aGlzLm5leHRMaW5rcy5pbnZva2UoJ3JlbW92ZUNsYXNzTmFtZScsICdh Y3RpdmUnKS5pbnZva2UoJ2FkZENsYXNzTmFtZScsICdpbmFjdGl2ZScpOw0KCQkJ CXRoaXMucHJldkxpbmtzLmludm9rZSgncmVtb3ZlQ2xhc3NOYW1lJywgJ2luYWN0 aXZlJykuaW52b2tlKCdhZGRDbGFzc05hbWUnLCAnYWN0aXZlJyk7DQoJCQl9DQoJ CQlicmVhazsNCgkJCWNhc2UgJ3ByZXYnIDogew0KCQkJCXRoaXMubmV4dExpbmtz Lmludm9rZSgncmVtb3ZlQ2xhc3NOYW1lJywgJ2luYWN0aXZlJykuaW52b2tlKCdh ZGRDbGFzc05hbWUnLCAnYWN0aXZlJyk7DQoJCQkJdGhpcy5wcmV2TGlua3MuaW52 b2tlKCdyZW1vdmVDbGFzc05hbWUnLCAnYWN0aXZlJykuaW52b2tlKCdhZGRDbGFz c05hbWUnLCAnaW5hY3RpdmUnKTsNCgkJCX0NCgkJCWJyZWFrOw0KCQkJZGVmYXVs dCA6IHsNCgkJCQl0aGlzLm5leHRMaW5rcy5pbnZva2UoJ3JlbW92ZUNsYXNzTmFt ZScsICdpbmFjdGl2ZScpLmludm9rZSgnYWRkQ2xhc3NOYW1lJywgJ2FjdGl2ZScp Ow0KCQkJCXRoaXMucHJldkxpbmtzLmludm9rZSgncmVtb3ZlQ2xhc3NOYW1lJywg J2luYWN0aXZlJykuaW52b2tlKCdhZGRDbGFzc05hbWUnLCAnYWN0aXZlJyk7DQoJ CQl9DQoJCX0NCgl9LA0KDQoJY2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7DQoJCXRo aXMuc3RvcCgpOw0KCQl2YXIgZWxlbWVudCA9IEV2ZW50LmZpbmRFbGVtZW50KGV2 ZW50LCAnYScpOw0KCQlpZiAodGhpcy5zY3JvbGxpbmcpIHRoaXMuc2Nyb2xsaW5n LmNhbmNlbCgpOw0KCQkNCgkJdGhpcy5tb3ZlVG8oZWxlbWVudC5ocmVmLnNwbGl0 KCIjIilbMV0sIHRoaXMuc2Nyb2xsZXIsIHsgZHVyYXRpb246dGhpcy5vcHRpb25z LmR1cmF0aW9uIH0pOyAgICAgDQoJCUV2ZW50LnN0b3AoZXZlbnQpOw0KCX0sDQoN Cgltb3ZlVG86IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRhaW5lciwgb3B0aW9ucyl7 DQoJCXRoaXMuY3VycmVudCA9ICQoZWxlbWVudCk7DQoJCQ0KCQl2YXIgY3VycmVu dEluZGV4ID0gdGhpcy5jdXJyZW50Ll9pbmRleDsNCgkJDQoJCVBvc2l0aW9uLnBy ZXBhcmUoKTsNCgkJdmFyIGNvbnRhaW5lck9mZnNldCA9IFBvc2l0aW9uLmN1bXVs YXRpdmVPZmZzZXQoY29udGFpbmVyKSwNCgkJZWxlbWVudE9mZnNldCA9IFBvc2l0 aW9uLmN1bXVsYXRpdmVPZmZzZXQoJChlbGVtZW50KSk7DQoJCQ0KCQl0aGlzLnNj cm9sbGluZyAJPSBuZXcgRWZmZWN0LlNtb290aFNjcm9sbChjb250YWluZXIsIHtk dXJhdGlvbjpvcHRpb25zLmR1cmF0aW9uLCB4OihlbGVtZW50T2Zmc2V0WzBdLWNv bnRhaW5lck9mZnNldFswXSksIHk6KGVsZW1lbnRPZmZzZXRbMV0tY29udGFpbmVy T2Zmc2V0WzFdKX0pOw0KCQlyZXR1cm4gZmFsc2U7DQoJfSwNCgkJDQoJbmV4dDog ZnVuY3Rpb24oZXZlbnQpew0KCQlpZiAoZXZlbnQpIEV2ZW50LnN0b3AoZXZlbnQp Ow0KCQl2YXIgbmV4dEluZGV4ID0gdGhpcy5jdXJyZW50Ll9pbmRleCArIHRoaXMu b3B0aW9ucy5pdGVtcywgY3VycmVudE9mZlNldHMgPSBQb3NpdGlvbi5jdW11bGF0 aXZlT2Zmc2V0KCQodGhpcy5jdXJyZW50KSk7DQoJCWlmIChuZXh0SW5kZXggPiB0 aGlzLnNlY3Rpb25zLmxlbmd0aCB8fCAodGhpcy5zY3JvbGxlci53aWR0aCA+IHRo aXMuc2VjdGlvbnMud2lkdGggLSBjdXJyZW50T2ZmU2V0c1swXSArIHRoaXMuc2Ny b2xsZXIub2ZmU2V0c1swXSkpIHsJCQ0KCQkJaWYgKCF0aGlzLm9wdGlvbnMucmVw ZWF0KSByZXR1cm47DQoJCQllbHNlIG5leHRJbmRleCA9IDA7DQoNCgkJfQ0KCQll bHNlIGlmICh0aGlzLmN1cnJlbnQuX2luZGV4IDwgdGhpcy5zZWN0aW9ucy5sZW5n dGgtMSAmJiB0aGlzLmN1cnJlbnQuX2luZGV4ID49IHRoaXMuc2VjdGlvbnMubGVu Z3RoIC0gMSAtIHRoaXMub3B0aW9ucy5pdGVtcykgew0KCQkJdmFyIGNvcnJlY3Qg PSBmYWxzZSwgbmV4dEluZGV4ID0gdGhpcy5jdXJyZW50Ll9pbmRleCsxLCBkPXRo aXMuc2VjdGlvbnNbbmV4dEluZGV4XS5jbGllbnRXaWR0aDsNCgkJCXdoaWxlICgh Y29ycmVjdCkgew0KCQkJCWlmICh0aGlzLnNjcm9sbGVyLndpZHRoID4gdGhpcy5z ZWN0aW9ucy53aWR0aCAtIGN1cnJlbnRPZmZTZXRzWzBdICsgdGhpcy5zY3JvbGxl ci5vZmZTZXRzWzBdIC0gZCkgew0KCQkJCQljb3JyZWN0ID0gdHJ1ZTsNCgkJCQl9 DQoJCQkJZWxzZSB7DQoJCQkJCWQrPXRoaXMuc2VjdGlvbnNbKytuZXh0SW5kZXhd LmNsaWVudFdpZHRoOw0KCQkJCX0NCgkJCX0NCgkJCS8qbmV4dEluZGV4ID0gdGhp cy5zZWN0aW9ucy5sZW5ndGggLSAxOyovDQoJCX0NCgkJLyppZiAobmV4dEluZGV4 ID49IHRoaXMuc2VjdGlvbnMubGVuZ3RoIHx8ICh0aGlzLnNjcm9sbGVyLndpZHRo ID4gdGhpcy5zZWN0aW9ucy53aWR0aCAtIGN1cnJlbnRPZmZTZXRzWzBdICsgdGhp cy5zY3JvbGxlci5vZmZTZXRzWzBdKSkgew0KCQkJaWYgKCF0aGlzLm9wdGlvbnMu cmVwZWF0KSByZXR1cm47DQoJCQllbHNlIG5leHRJbmRleCA9IDA7DQoJCX0qLw0K CQkNCgkJdGhpcy5tb3ZlVG8odGhpcy5zZWN0aW9uc1tuZXh0SW5kZXhdLCB0aGlz LnNjcm9sbGVyLCB7IGR1cmF0aW9uOiB0aGlzLm9wdGlvbnMuZHVyYXRpb24gfSk7 DQoJCQ0KCQl0aGlzLmhpZ2hsaWdodExpbmtzKG5leHRJbmRleCk7DQoJfSwNCgkN CglwcmV2aW91czogZnVuY3Rpb24oZXZlbnQpew0KCQlpZiAoZXZlbnQpIEV2ZW50 LnN0b3AoZXZlbnQpOw0KCQl2YXIgcHJldkluZGV4ID0gKHRoaXMuY3VycmVudC5f aW5kZXggPCB0aGlzLm9wdGlvbnMuaXRlbXMgJiYgdGhpcy5jdXJyZW50Ll9pbmRl eD4wKSA/IDAgOiB0aGlzLmN1cnJlbnQuX2luZGV4IC0gdGhpcy5vcHRpb25zLml0 ZW1zOw0KCQlpZiAocHJldkluZGV4IDwgMCkgew0KCQkJCWlmICghdGhpcy5vcHRp b25zLnJlcGVhdCkgcmV0dXJuOw0KCQkJCWVsc2UgcHJldkluZGV4ID0gdGhpcy5z ZWN0aW9ucy5sZW5ndGggLSAxOw0KCQl9DQoJCQ0KCQl0aGlzLm1vdmVUbyh0aGlz LnNlY3Rpb25zW3ByZXZJbmRleF0sIHRoaXMuc2Nyb2xsZXIsIHsgZHVyYXRpb246 IHRoaXMub3B0aW9ucy5kdXJhdGlvbiB9KTsNCg0KCQl0aGlzLmhpZ2hsaWdodExp bmtzKHByZXZJbmRleCk7DQoJfSwNCg0KCXN0b3A6IGZ1bmN0aW9uKCl7DQoJCWNs ZWFyVGltZW91dCh0aGlzLnRpbWVyKTsNCgl9LA0KCQ0KCXN0YXJ0OiBmdW5jdGlv bigpew0KCQl0aGlzLnBlcmlvZGljYWxseVVwZGF0ZSgpOw0KCX0sDQoJCQ0KCXBl cmlvZGljYWxseVVwZGF0ZTogZnVuY3Rpb24oKXsgDQoJCWlmICh0aGlzLnRpbWVy ICE9IG51bGwpIHsNCgkJCWNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTsNCgkJCXRo aXMubmV4dCgpOw0KCQl9DQoJCXRoaXMudGltZXIgPSBzZXRUaW1lb3V0KHRoaXMu cGVyaW9kaWNhbGx5VXBkYXRlLmJpbmQodGhpcyksIHRoaXMub3B0aW9ucy5mcmVx dWVuY3kqMTAwMCk7DQoJfQ0KDQp9KTsNCg0KRWZmZWN0LlNtb290aFNjcm9sbCA9 IENsYXNzLmNyZWF0ZSgpOw0KT2JqZWN0LmV4dGVuZChPYmplY3QuZXh0ZW5kKEVm ZmVjdC5TbW9vdGhTY3JvbGwucHJvdG90eXBlLCBFZmZlY3QuQmFzZS5wcm90b3R5 cGUpLCB7DQogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsNCiAgICB0 aGlzLmVsZW1lbnQgPSAkKGVsZW1lbnQpOw0KICAgIHZhciBvcHRpb25zID0gT2Jq ZWN0LmV4dGVuZCh7DQogICAgICB4OiAgICAwLA0KICAgICAgeTogICAgMCwNCiAg ICAgIG1vZGU6ICdhYnNvbHV0ZScNCiAgICB9ICwgYXJndW1lbnRzWzFdIHx8IHt9 ICApOw0KICAgIHRoaXMuc3RhcnQob3B0aW9ucyk7DQogIH0sDQogIHNldHVwOiBm dW5jdGlvbigpIHsNCiAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRpbnVvdXMgJiYg IXRoaXMuZWxlbWVudC5fZXh0ICkgew0KICAgICAgdGhpcy5lbGVtZW50LmNsZWFu V2hpdGVzcGFjZSgpOw0KICAgICAgdGhpcy5lbGVtZW50Ll9leHQ9dHJ1ZTsNCiAg ICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQuZmlyc3RD aGlsZCk7DQogICAgfQ0KICAgDQogICAgdGhpcy5vcmlnaW5hbExlZnQ9dGhpcy5l bGVtZW50LnNjcm9sbExlZnQ7DQogICAgdGhpcy5vcmlnaW5hbFRvcD10aGlzLmVs ZW1lbnQuc2Nyb2xsVG9wOw0KICAgDQogICAgaWYodGhpcy5vcHRpb25zLm1vZGUg PT0gJ2Fic29sdXRlJykgew0KICAgICAgdGhpcy5vcHRpb25zLnggLT0gdGhpcy5v cmlnaW5hbExlZnQ7DQogICAgICB0aGlzLm9wdGlvbnMueSAtPSB0aGlzLm9yaWdp bmFsVG9wOw0KICAgIH0NCiAgfSwNCiAgdXBkYXRlOiBmdW5jdGlvbihwb3NpdGlv bikgew0KICAgIHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0ID0gTWF0aC5mbG9vcih0 aGlzLm9wdGlvbnMueCAqIHBvc2l0aW9uICsgdGhpcy5vcmlnaW5hbExlZnQpOw0K ICAgIHRoaXMuZWxlbWVudC5zY3JvbGxUb3AgID0gTWF0aC5mbG9vcih0aGlzLm9w dGlvbnMueSAqIHBvc2l0aW9uICsgdGhpcy5vcmlnaW5hbFRvcCk7DQogIH0NCn0p Ow== ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=thumb_1_97_1.jpg Content-Type: image/jpeg; name=thumb_1_97_1.jpg Content-Location: http://small02.cdn.content.adultcentro.com/content/vs_server6/10/CONTENT_FREE/Video/18_and_confused_07/thumb_1_97_1.jpg?e7d83000661881c86bd3e751cde3f0346da82d2786584353f48da976bc9e6dc4ecc8 Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQAAAQABAAD//gA8Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1 c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gMTAwCv/bAEMAAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAf/bAEMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAOcAoAMBIgACEQEDEQH/ xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUE BAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZ GiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOE hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX 2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQID BAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIy gQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpT VFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeo qaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/ 2gAMAwEAAhEDEQA/AP2h+MfgbSrjxF9tvrGCa/0qRpbSUqw+ztIIW3Kiukcih0Lx iQOInAZQGOV/N747fH74U/B9r638UeIbC31K1s5r2LRYZkn1a6CCQrDp+nRF7u8u XMcnkxQRO8gjdtrKjFf1g/a+1Ox+GGh+N/GmqLILLwzol/q10IYyWEFlZNO/ljgl yIyEUclgBkdv5Ov2ddKf9rP9pqwT4neHbXU7vxZrXiPxFZWVxcSTHSrzRJ9LudE0 y2uVZRJZQeHYNTs7p2jdWWSeRUQStjs4z43jwvgcPi5RVepXlanSnJKEaNKnCriJ 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 oKFp/Sf2jWx2HzG+S3xlPAY5RxE3KFClPGYWNOjXpQVNNTw1aFKdKjTxEHD2sqjp TdRyWX4EX4f/ABY+Ott4C+EHgPwz4E+Hvw/1fxRceJJfAuh6T4b0rXtSt4NE0fUV 0+x0aysbe2gsINJsvDtpqEgmkuHniZVaDT4Wk1/25P2obj4M+DrGfwWdOfxzrGoa p4e+Denywxtp2iy6Esel+LfjDf2DCaOeHw5NLB4W+HNpKptrfUkv9TkN00cPkeff 8E24NRj/AGfPiV8TdOhx4u8d+LV8G+Fp2dpJoLia8VkuFz5bSLLrvjOyuLgbR5g0 GHLEFSnyh408LeHP2kf2gfjh8WfHfiy68C/sq/s43dv8MdL1nSdPPifxDrfhv4aN caZe2vhu0jcW0dzquo2mrazfXjrdzTyX0eyymuJQ6+t4jZjTzPjnJuBalWdThvwk yPhjO8fg68oSoZ34pcb4PE53l9fHQmo061LhPK6GNzXCYbkWHoZhmmWYmvTccHSb +H8cMDhsBxxW4GyWnVlkHh/gqWQUHzyr1K+MrUsPm3E2Pqcz9o8RmGaZnUy507ON OngMThMLClRqezX42r+0xe+E/FviDwt4bku9e1C6vJLzxP4o8QTTahqHijWbmVpd X1XU57l98ifa2kW3tprjlF8+RzcThh9T+H/hr4J/aj8KS+GPEWm2vh7UtXshHoGp aZAsZ0LWhGPsN5dWiQW8enW+sSJ5N7HbR3CyobW5ebzbZpD83+HPhH4W/wCEzTVN O07VtU8Pa9qzyWHibUYXtNUv7O4vrhheWmgLO1xIbqOTd9iiDlJiLSSd5Edx/SD+ yX+yh8MPB2hXF9qEFznVNOhvpbadrW1v43uObe3kuoYppLaSe0UJNErTyRQII1nD SoyfPUc5nUxcaOEp1FV5/aTq1qlJSlNuLqcz5m0nVV5Np3b57tS5jgrZPhMBh44i yrUnBU1GjSd5U1yQ5bSledTl5eZ1bLmaTas4y/mb8E6L8VfgV4tvfhn4nsr+xhtL r7Cs81ncwaew8x0imSS7WFIgcxI6hVd3niVSWR8/cfw51e01++8PafqGtt4fXV9U sLWz1SGyutVu5L+4mDadYadp9pDNcXuqX10sNrYwCGVZLiRUlilTKN+wP7YPwp8J eL/h/wCOVtNMP9p3Gj38tpd3F5NNHa3sMDy290Gu5hDZyW88MLC5RoTsjczvIjtj +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 sFpdMsbiPR9eNpdxlLi3uSLe2vxG88lnMUZd/FHxNqfgnTvAvjvw34gn8T6Yv9kT 6jolvFdw649svkWev20ttIf7NudQhWO6vdMuI/LtL2a6gt7i9tEjlH53+J/EXj34 A6+NN+G/gLR/D03iPUYtS17xtrok1jxMtte3sVldW2k6Rp9vbWVhcaXY3fkadd6j f6vFa287QWunQKZCf1DAYejhctp51Vr0IQp4ilRgqtaCnGrKMak70JVHVq2pKfNy Qi+dQ5pJOTfpZZk2ErZfXw9WjXlnEK1SeHcWo4athJYerCUvbSq0+SeHxEaFeNqF d1aVSrRdOLlGpQ0v+CjUo0KbSPEWh6loCfHqz8SWmqeCYLbVIdI0bR4Lm8s21+1v NRu5Fu7Twi1rYRW2p3MKQ3N/PeyadaLbz6mDB+Q/wr+H134g+Llne+MvFlj49+JX jrxQ/wATPiFqthbxwaDpHhjwneM0Gn6bGhlW10i8197C3s3WV4tQ2zmCW58m4upu /wDiF8HfiNq/xN1zx34svde8WPrN4bXxUdYmnvLptGtL2YW1payzZS2jsI9Snhit YIILWX7XNGkeyU50/hr4ZPgjXPHGuxxzrrXj+68MeG9JmaUhls7i6vrfRLGKZw7R w2ts3iDXb91aKIjVILh0jGmrJW2N4ohRp1sDhMYq1N05VkoxUeX2koynBTk3KEKd SVWtFRvGUoKTUVOLpzT4WqYGnLGzjRlXrVEpOFRygpRpwjTrTSdpydOEYSvBOmlC PPKMbz/aj9h2K6uvFH7KRvHlW48Q/GDVvE1xbs2HnhSW1CYxyifZbaSQJsI2LsDE qCf0E+Oln8Tvh1428YQfGP8AaA0jXvC/jHV7/V/Bfwvt9Dl8datqujT6hLHo32bw hf29jpXgxbXI0a3v11iKSe5gmksWvHWTHwt/wTxEfxO/a/8Ag7o3hTdJ4P8AgX8I NS8YardKMQRxzLDoekl48BRJrmoXK3VmxOTCs8nz+W2z9+PE/wAEfhF40+JfhL4t +KPDR1Lxp4MW0j0m8TULuOwuY9NvJ73SW1PTI2FrqT6Vc3M1xp7zxhoJJD5gmVY1 j/avo6V3h8p4jx9WjJUcTnPsU/ZUZuc8Ng6OIjGjPEw9yEJ4qNJzjGPuqyi5KLX4 /wAQ8Q4Th/jWrLMKEsThamRU606WFwGV4zH0cW8XisbltCjXzOnUjlyrNUXisRSj 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 mtTLM0+p1cXTni5e0qQwmGrVKU6WKxuYVMLWw9avOhXpLEz9nXpzUm5KSPafC+p+ aHhmmWYoVYqrDdE53FRnd8hdBgYVi2Cc9q3tfsE1O2ZXhXasbFdvJwMbhnC5OcMx wMnJx0NfJHwy+Kug3vizxPoRuAdUtfEDxzW/m7pI4EhtxZkJyVSSz8maLuyzs4B3 A19kCWK7swqzL88eAQclcrkccbTk4PPP8vmcJVw+Y4SUJNST5o33bvNcvM29VyqL SSbspWu/de1enWwmKg1zKUXFXakrJKLl7q+y76Ss015Ox4LPpt/pUsjWjyNCQC1q zEo+18jAxgMB2OBzzyK2bO2sNfjJmtER1GPLkUHy2+65DYABZUGMAcr6jI3rzSJb d8ve3MyLjAuBBIJIxkFDsijwejlmG4k4xg0/Q/KivpIRbqkUoPylixcj724sNyhg TgAg5BIGTXlwwEctxNCUcTF0HUg3RnGTkpOTcZJyjN04t80VdqOsFTjJ2ivfp5hX lSlNUZwnCHOqqnDWyTs2pLmdrW917NNrRvz3V/BumC9E9sSDGGRZPJUoHVVbcHP3 mB24J+bC47V8x/FX4IL4kM960AuFa11GymkYKjJFd2cqx3EThXC/ZZ4op1UDL7Ww VOCP0ebRIZoIjHbRfN85KnYeMnJye2QDgHPOeeK868UadBHZyRMFD4YIWwVYYK7C OcggAHOMjk988Oe5dUqUZVansqUOeNaFOlKainJK9NXa5lZJe0abtGFmrtPuyviW rOpGlTnUU+V0rvlnJJ3Tlol11aTsvlZ/jD8UvDmlT+Kr7ww1tFbz+I/Ct1qUM0Y8 yI+IbO9sdeOno8SsMTWaCO1+Y+csEmxPkbH4g/tc6J4r0jxpqOgRPq9h4Vi8IXYu tZ0q1lmktdOu/EtzpetNbFGRIriXQ7e0i3xujmxnRn3RnZX7N/tjeMYfgx4s8PeL NVeC20K91jR9EudaErhvDdzDfy/8I/rZj2MvkaXFd3mm6kCwS7024TBgkgzJ7dc/ sm+M/jn4P0Dxp4G8GQ+KfDniJ77VYp9I1HSZ7K11DTnbSvEOgu95eRC70++ns7qy gIy0Mq20khUAmT4vI6WcVMc55dlOMzOsnV9nhsLhquMnGMJrmq+yo06lRwp1KkIT bg4RlUi5x1cT7ipnWCybDUVmmKp0sLiqEY+0rVo0eaqqShNQlUuuaVGM2oxfO1Cb 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 d26tIx/K/pF5Lwnw1xXwXxvPhZ185zrKsw4OzPOZOdTAVcFllWjm2Uwx2AaqYTEZ pgq+MzFZLjcRTVbB4DMM/wAPQmoVqsV/PHHHhZifaPHZTjcRk8aOCSqvCYmdGWYY 2VfDRVOtKCjUpUKeEo1Izca0frNeeWxcVDBPn/Ob9kL/AILMeL/g38YtK+Hv7Yza Z8ZfgX4j8R2HhvVPjBPoOl6N8TfhvcyXMNnH4ztNV8P2VqfEHhWxu4pbrU9H1KH+ 1LSxVdQ0vWI5YWtLj+pD4yeA7mHxJrc3gvVbbXpT4VXxTrd3Nf8A9r6Xp5l1KxHh 7xsb1vtsS6nrsE2oxpcp++8SaMl5LO1zbwmVPx/+M/8AwRa+CvxG+FmiWWt+J7q1 13w1pY174i+LfCDiPTNXmZbdtU0XS49V+0WNpDayzXcdjqMEKpFb2QuJ4pjNGD9n /s7eJ/gP4F+B3hX4M+J/2u/2g7FND8N6b4P17SpfBPw51S38Xx6FZHSLO/0/xe3g vUr/AOy32mwWEMkeq6u8iQ2n2SEW9o8aJ/KPFfE3B7jhqmGjVyXHQnL6x7LA16lK uqcH7HEUVg6M6TnOXtI13KFNKEnyxk3UT8/hLJOMOHpYjGYjF4jP8upyoLCRwtDN czxmFr1qtOrUw+Iw1HCYnHUko0rQqVk8PKcKU61eEJQhX+ubH4WTTfCe+8NeHfFD +F/Ems+HdU0uy8XXENteXNrJqx+13unW1rPKr2trrDQC1ntNJubeeFZzJbyvNax5 /Hz4a/8ABJPWf2jfjzJ4k/aIh8QeHP2fvhDq0+j+N/Eb3M1rdfFjUbS6SMfD/wCH tjcWc91qOh6tcRjTdX1/SrVHj82TSfDtzca47zW/7GaB8V/Cvjjw74X8PfBW/wDG +kS+HfizoNr4uvte8TeHNP8AFfiHwMPAnjazl1pYNJ1G3EXh+38Rah4e/tG0s4le GXyruSAw2jSQeYeBvEX7WWlx/A3w5qHinXtasfDkHh6K60qL4hfDW58V3msnwR+z DZ2mm6lqWtX+tahcQJ4lm+N+nPLeWmoySyxahpYeJ5dLuovIyDMMXjMtxOL4TzTJ 62a1pYnBxqYuljKzy5UMXSwuKzfEZWsHh8fioYZVeahgK6wOCxLjGrLHywyjTxP3 2ccBZh4g4LFJ8S8OcKY+NWeNnhuLMzjleNq4WnQzavKFOEXXoYbHYqrgcKsO60pq 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 4p+F/ir4rfB/UvEfjvxgfBWlePvE/iH4SazdeNfEMcHhb4K3Hl3lkLjQtJtru2vP FXjvSNV8Sx2WnX9vBpEUGp38t7oiW03ocVcO5/w7nGMyzEwpVsxy+UPY0cXjMdRy ydHO8pwWZrH2eCoyVZYfNMBLCVo4NRpU6VSlGt7kZz/QuEM8zTxBhDjLLeHPDXgn LaXCOT8P4nh7NcwxMsVjMRlvEFPjCjxJlOXVsDl8MNiquXcPPI4yxGNzbH1sBntW UpzoZjKGF+gdY174meKv2eP2ffDlpoPxT1Pxp4Ct/idL8c/hrb/EHUNd+JllceJP hb8S7X4NQfELxH4Ut/DmvfatW8T2GnQ6XftpdveaJqclpPepDeW0czeTal4I/bA8 RweLbzwve/Eyy1fU9Q8f+KdFe1+KE2o+HLKy8Vfsg+D/AA1p+g2ni+bxIdFvNS07 4uaZqmj2mnyXZ1GDxE95rLQW7XM+oFPhhrTwWzw+N/CHhPwn8YNa8ZfCnwBY6FD4 X0Lw7N4y0yW50nxF8ZZLHw3dQzReNrnwNa2EHiSa+8P2Gtax4SsNRnuLFI49UKt1 Xw58R/tKQeFPhvPo3gnT9Pe6v2k8U6d4L8D+B751VfAXwSvLZUjSea30bSdR8b6z 8YrPWtUuH/s6yvdBudKjNg+kw2w+fpxzPB5XhcNGtlrxtHH5picW8Xh5U8FBYjMH icPDBYyChia+HoKvPDPD1KWBhCdCo4QUaaUftctxWfcO5rxFgcuo+DNCWCx/ElGV PiPMsyq4OouK3V4/csoo1MfVWY4Ogs4rZHh8ZXpTxcsFhsnyzGY2s8O8TX8su/2Z /jnceDviFaP4C8Vw6P4+8Q/ErUtW8H3viLSLW+8Qa3rH7GPg/wAFeG9f8TaNfeI4 7jUjbfGDS9Rs7LUNVacW+pTz60QLWaG/Pa6p8Dfjl4F+HvinUrTwn4hkZLnxdamy 8C38HiHWNbuNX/4J+eEPhNpc+m6f4Svb+81H7H8S9Lu9JGVW4S7iN5ZR3EREx/Ty /sEubq+Fna6hFpw1K7axjvdD1Oy22Uj6xNZtNJe20SCNLbShbyzFz/pV/osDt5mr 2Bk6LS9PlgjY28YtnkUbniUIr9OH2YztJOOwAJBGeeXCZ1m1ar7S2GdShWhiJUY4 TF5fKM5SqNU3UlisZNU4zcnKmqL9oo1aftYc8pv4mt9Izi2cMIsTlHC08NSwUsvx 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 ZwisyoR9pUtUUPuHwh4bfwsl9ZfDzwje/ELxla3Flbaw1te6fpmn6PLcGKOODXvE epulrDPBGWv7zToJLvU/JBuGsnLQ7/mr4beJfihp/i/40eL/ANo1bKXXfDvxN17w D4fj8K2F4vh7SfCulXnlW1r4Ks9TupNQvm1Sy+z6hrut3MiXupXEoheCytLW3sYv 1yvINN8PyR6Jo1lZ6VplrNKltZWUaW8KmV/3kjKmN8krbWmnctPJKS8jytzX5U+P fDHifxZ43+KZ8OavGJLPX/GsvhSXUtMiv7Hw3f6lKrzaxqEcO661aGfXVuGgjmUR 2dhDbQQWd1suBcZ/SYy7N/DXwyocWTxlTibjPMc4lPM62KlialHETrYaDxGOrUqd HFY7F4PJMPGWPxeJjH2/scO406NGkqGHofDeH2dUOL84qwzJRy/LpYaFWeMqOr9a dOVSi40XiIudHD+3nDkpwpYXnpwqVYynjKlOEanxd8I/gTqnxE+Mfx/1HWvEmnWF n8SPirrviy30m1nktfEOu+HjfSPpMMlverbzWdvY6W0I1RrWO5uJPOEJntbckzfr h4C+FvhLwXYRW5ksxKsUZKxhGmZoY1jTzJPncsFUKGkYlVUKoKjA+G9N8KePPAXx Z0n4l/E/xF8KfA3h2PTdREVjo2vy6tq2sLeWf2d10XRnt4LjS4Ny28z6jeO9wkaT WwijjnYp9ZeFPGut+PbFrj4Y+BvE/i2zmUNa+IotOksvDlwM48yLxHq72Gj3a5BL NZ312mDmNTg4/DPDrF1czyfC4/OMDhcZnuJrYifsMt9vi6Nb2VatShiMLhYQniYu pebjGrTpypwm4SfM5RX6j4kYh1qmDo5ZnNKeQ08swPtqscTh1gMFi4QWFqYKWZzV DDYiVKlhqN6icp8zdK6dNJe9XWqaNZQhZWggjRScEoNqrnAycAgKFwozk85BOa+c /iH+0X8PfDcn9lSeI9LGpFWMWmW9wtxqW0AkSHTbTzrxY2wESUxeUZNw3AqAeL/a D+HXxC0f4MfEXxL8QfiJpfw0uE8O3lr4ft/C7wazqmn65qiiw0u91XxFqkDaLDFa XdzDO+n6Vo95LcopUatb8FvyR+HP7Ofiz+zdN1lZ/EnhH4VePLwadD8S/HiXWr+N Pixr4VppdZsbW51KK903QtbRbuLw9qF/NJYxuIbXSLSe0uFv3/Q7Z/nObYDhzB4G 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 ------------1TWFBtPx3ZKu3wM2BbUMhk Content-Disposition: inline; filename=epoch_descriptor.htm Content-Type: text/html; charset=UTF-8; name=epoch_descriptor.htm Content-Location: https://epoch.com/compliance/epoch_descriptor.php?master_code=M--288261 Content-Transfer-Encoding: 8bit document.write("EPOCH.COM"); ------------1TWFBtPx3ZKu3wM2BbUMhk--