Upload
craig
View
78
Download
0
Embed Size (px)
DESCRIPTION
Fast and Memory-Efficient Regular Expression Matching for Deep Packet Inspection. Fang Yu Microsoft Research, Silicon Valley Work was done in UC Berkeley , jointly with Zhifeng Chen (Google Inc); Yanlei Diao (Umass, Amherst); T. V. Lakshman (Bell Labs); Randy H. Katz (UC Berkeley). - PowerPoint PPT Presentation
Citation preview
*Fast and Memory-Efficient Regular Expression Matching for Deep Packet InspectionFang YuMicrosoft Research, Silicon Valley
Work was done in UC Berkeley, jointly with Zhifeng Chen (Google Inc); Yanlei Diao (Umass, Amherst);T. V. Lakshman (Bell Labs); Randy H. Katz (UC Berkeley)
Ph.D. Qualifying Exam
Regular ExpressionsFlexible way to describe pattern Example: for detecting yahoo messenger traffic^(ymsg|ypns|yhoo).?.?.?.?.?.?.? [lwt].*\xc0\x80
Used in many payload scanning applicationsL7-filter: protocol identifiersBro: intrusion patternsSNORT: No regular expression in April 20031131 out of 4867 intrusion rules contain regular expressions as of Jan 2006
*
ChallengesFeatures specific to packet scanning applications
Large set of patterns, order of 100s or 1000s
*
SnortL7-filterXML filtering# of regular expressions analyzed1555701,000-100,000% of patterns with wildcards ., +, ?, *74.9%75.7%50% -100%Average # of wildcards per pattern 4.77.01-2% of patterns with class [ ]31.6%52.8%0Average # of classes per pattern8.04.80% of patterns with length restrictions on classes or wildcards56.3%21.4%0
Design Space*Automata-based ApproachesDFA-based NFA-based Patterns (A|B)C and (A|D)EA group of states can be activated simultaneouslyOnly one state is activated High percentage of wildcardsNFA-based approaches can be slow, sometimes less than 1Mb/sRepeated ScanOne Pass Scan Start scanning from one position, if no match, start again at the next positionGood for parsersPackets may not contain any patternsNo guarantee of high speedScan the input only onceFast and deterministic throughputAdd .* before patternsSome patterns generate very large DFA
m Individual DFA for m patterns One composite DFA for m patternsO(m) processing complexity for each input characterO(1) processing complexity for each input characterRewrite techniques to reduce memory usageMake DFA-based approach feasible
ContributionsSelectively group patterns into k groups (e.g., k=3)Avoid exponential memory growthFurther speed up matching process
(Space Problem)
Start
3
A|D
4
2
E
C
A|B
1
Start
5
D
2
E
C
B
1
3
4
A
C
E
DFA Sizes of Regular Expressions*Typical patterns in network payload scanning applications
Rewrite Rule 2 Focus of this talkRewrite Rule 1
Pattern featuresExample# of states% ofpatternsAverage #of states1) Explicit strings with k characters^ABCD.*ABCDk+125.1%23.632) Wildcards^AB.*CD.*AB.*CD k+118.82%27.203) Patterns with ^, a wildcard, and a length restriction j ^AB.{j+}CD^AB.{0, j}CD^AB.{j}CDO(k*j)44.7%180.314) Patterns with ^, a class of characters overlaps with the prefix, and a length restriction j ^A+[A-Z]{j}DO(k+j2)j~3705.11%1369035) Patterns with a length restriction j, where a wildcard or a class of characters overlaps with the prefix.*AB.{j}CD.*A[A-Z]{j+}DO(k+2j)j~3446.27%>2214
Design ConsiderationsCompleteness of matching results for one patternComplete matching Report all the possible substrings E.g., a pattern ab* and an input abbbFour possible matches, i.e., a, ab, abb, and abbb
Non-overlapping matchingCommon practice: left-most longest match, shortest match results
In most payload scanning applications, for one pattern, reporting non-overlapping matching result is sufficient *
Patterns with Exponential DFA SizesOften for detecting buffer overflow attempts, e.g., .*AUTH\s[^\n]{100} DFA needs to remember all the possible AUTH\s A second AUTH\s can either match [^\n]{100} or be counted as a new match of the start of the pattern AUTH\sGenerate a DFA of >100,000 statesCant be efficiently processed by an NFA-based approach either
*NFA for .*AUTH\s[^\n]{100} Input AUTH\sAUTH\s AUTH\s\s AUTH\s\s\s
Rewriting IntuitionOnly the first AUTH\s mattersIf there is a \n within the next 100 bytesNone of the AUTH\s matches the patternOtherwise, the first AUTH\s and the following characters have already matched the patternRewrite the pattern to:([^A]|A[^U]|AU[^T]|AUT[^H]|AUTH[^\s]|AUTH\s[^\n]{0,99}\n)*AUTH\s[^\n]{100} generates a DFA of only 106 statesThis rewritten pattern Report different numbers of matches from the original pattern in identifying complete matchesEquivalent in identifying non-overlapping patterns
*
Rewriting Effect on the SNORT Rule Set *v
Pattern featuresExample# of states% ofpatternsAverage #of states1) Explicit strings with k characters^ABCD.*ABCDk+125.1%23.632) Wildcards^AB.*CD.*AB.*CD k+118.82%27.203) Patterns with ^, a wildcard, and a length restriction j ^AB.{j+}CD^AB.{0, j}CD^AB.{j}CDO(k*j)44.7%180.314) Patterns with ^, a class of characters overlaps with the prefix, and a length restriction j ^A+[A-Z]{j}DO(k+j2)
O(k+j)5.11%1369035) Patterns with a length restriction j, where a wildcard or a class of characters overlaps with the prefix.*AB.{j}CD.*A[A-Z]{j+}DO(k+2j)
O(k+j)6.27%>2214
Rewriting Effect on the SNORT Rule Set Created scripts to automatically rewrite patterns
*After rewriting, patterns in SNORT and Bro can be compiled into DFAs
Type of RewriteRule SetNumber of Patterns Average Length RestrictionDFA Reduction RateRewrite Rule for Quadratic caseSnort17370>98%Bro000Rewrite Rule for Exponential CaseSnort19344>99%Bro49214.4>99%
Design Choices*Automata-based ApproachesDFA-based NFA-based Repeated ScanOne Pass Scan m Individual DFA for m patterns One composite DFA for m patternsO(m) processing complexity for each input characterO(1) processing complexity for each input characterRewrite techniques to reduce memory usageMake DFA-based approach feasible
ContributionsSelectively group patterns into k groups (e.g., k=3)Further speedup matching processAvoid exponential memory growth
State Explosion ProblemRandomly adding patterns from the L7-filters into one DFA
*
Chart1
3536
3531
3553
3543
3757
4098
5748
7038
7550
7684
7664
22833
22972
23124
23084
23114
23099
23101
26937
29793
29792
29785
29777
29958
30298
30291
30637
30629
30583
36458
36466
42477
49641
55684
# of patterns compiles together
Total Number of States
Sheet1
128282121
243342927
363464239
480555248
5216183181176
6243202201195
7272229223222
8290240234233
9320249257242
10329252259245
11360274283267
12437343353336
13489579398572
14553749455742
15623941518934
1667125235592516
1773582226168215
188581269973212692
199791871184618704
2010215304788153040
Sheet1
Sheet2
totalstates36
totalstates28
totalstates42
totalstates16
totalstates52
totalstates14
totalstates40
totalstates50
totalstates15
totalstates28
totalstates17
totalstates55
totalstates42
totalstates24
totalstates15
totalstates39
totalstates27
totalstates15
totalstates20
totalstates17
totalstates16
totalstates26
totalstates21
totalstates79
totalstates40
totalstates23
totalstates39
totalstates15
totalstates46
totalstates47
totalstates41
totalstates136
totalstates27
totalstates64
totalstates29
totalstates12
totalstates15
totalstates27
totalstates56
totalstates71
totalstates21
totalstates18
totalstates40
totalstates34
totalstates31
totalstates29
totalstates174
totalstates13
totalstates48
totalstates30
totalstates667
totalstates72
totalstates9
totalstates70
totalstates64
totalstates17
totalstates39
totalstates123
totalstates121
totalstates15
totalstates28
totalstates13
totalstates22
totalstates31
totalstates21
totalstates77
totalstates13
totalstates275
3537
Sheet2
Pattern ID
# of states in DFA
Sheet5
Accumulated size of separate DFAsCompiled into one DFA
2334151588502334
233456504243492335
233470574950482335
233496776870472336
2334110857578462337
2334125948387452338
2334150113101106442339
2334172129116122432340
2334202148139141422336
2334215151145144412333
2334230155153148402329
2334243158159151392326
2334264173173166382327
2334299202201195372328
2334315213210206362330
2334353244241237352330
2334373257254250342330
2334387264261257332330
2334399270266263322331
2334413278273271312332
2334446303299296302331
2334473319319312292327
2334497337336330282328
2334511361343354272345
2334538381363374262345
2334561399379392252347
2334600431411424242347
2334646450450443232327
2334685479482472222324
2334701500491493212336
2334722509505502202331
2334735527511520192343
2334755540524533182343
2334793570555563172342
2334838623593616162357
2334916694664687152357
2334942769683762142413
2334997838731831132434
23341025866752859122441
2334109510898151082112601
2334114411428571135102612
233411851360891135392796
233412241659923165283063
2334139718221089181573060
2334157966611264665467724
2334161885841296857759615
2334228411665195511658412037
2334255811961222211954312066
2334262913995228613988214036
2334268430486233430479130479
Sheet5
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
Accumulated size of separate DFAs
Compiled into one DFA
# of patterns
# of states in DFA
Sheet4
&A
Page &P
# of Patterns Compiled Together
Processing Complexity Cost (Red Solid Line)
Storage Cost (Blue Dotted Line)
Sheet3
Accumulated size of separate DFAsCompiled into one DFA
12828212120625920
24334292719711719
36346423918708718
48055524817704417
521618318117616699116
624320220119515680915
727222922322214661314
829024023423313639013
932024925724212614212
1032925225924511588611
1136027428326710562510
12437343353336953419
13489579398572851798
14553749455742748947
15623941518934645686
1667125235592516555915
17735822261682154106744
1885812699732126923144193
1997918711846187042195852
20102153047881530401530401
Sheet3
Accumulated size of separate DFAs
Compiled into one DFA
# of Patterns
# of states in the DFA
&A
Page &P
# of Patterns grouped together
Processing Complexity Cost (Red Solid Line)
Storage Cost (Blue Dotted Line)
nowtesting1:00totalstates3570353536
nowtesting2:00totalstates5869283531
nowtesting3:00totalstates12268423553
nowtesting4:00totalstates12867163543
nowtesting5:00totalstates39466523757
nowtesting6:00totalstates74965144098
nowtesting7:00totalstates243964405748
nowtesting8:00totalstates377963507038
nowtesting9:00totalstates430662157550
nowtesting10:00totalstates446861287684
nowtesting11:00totalstates446560177664
nowtesting12:00totalstates19689595522833
nowtesting13:00totalstates19870584222972
nowtesting14:00totalstates20046572423124
nowtesting15:00totalstates20021561523084
nowtesting16:00totalstates20090553923114
nowtesting17:00totalstates20102542723099
nowtesting18:00totalstates20119531523101
nowtesting19:00totalstates23975522026937
nowtesting20:00totalstates26848511729793
nowtesting21:00totalstates26863501629792
nowtesting22:00totalstates26882492629785
nowtesting23:00totalstates26895482129777
nowtesting24:00:00totalstates27155477929958
27535464030298
27551452330291
27936443930637
27943431530629
27943424630583now testing 42: total states 144081
30329414736458now testing 43: total states 145497
30378404136466now testing 44: total states 145742
365253913642477now testing 45: total states 149579
43716382749641now testing 46: total states 150643
49823376455684now testing 47: total states 151520
36295832
3512
3415
3327
3256
3171
3021
18
40
34
31
29
174
13
48
30
667
72
9
70
64
17
39
123
121
15
28
13
22
31
21
77
13
275
3536
# of Patterns
# of states in DFA
&A
Page &P
# of patterns compiles together
Total Number of States
Interactions of Regular Expressions Some patterns generate DFA of exponential sizesE.g., A DFA for pattern .*AB.*CD and .*EF.*GH*
Start
1
2
3
S1
A
B
C
D
A
Not C, D or E
Not C or E
Not A, B or E
C
4
5
6
S2
E
F
G
H
E
Not A, E or F
Not A, G or H
Not G, or A
G
A
E
E
7
8
F
A
9
B
10
S1
D
C
C
11
S2
H
Not C, G or H
G
Not C, D or G
E
C
Not C or F
G
C
G
A
G
Not A, B or G
E
A
Matching AB
Matching EF
Matching AB and EF
Not A or E
Grouping AlgorithmsFixed local memory limitation (NPU or multi-core architectures)Compute pair-wise interactive results, form a graphKeep adding patterns until reaching limit Pick a pattern with the fewest interactions to the new group
Fixed total memory limitation (General single-core CPU architecture)First compute the DFA of individual patterns and compute the leftover memory sizeDistribute the leftover memory evenly among ungrouped expressions
*
Experimental SetupRegular expression pattern setsLinux application layer filer (L7-filter): 70 regular expressionsPattern sets from Bro intrusion detection systemsHTTP related patterns: 648 patternsPayload related patterns: 223 patterns
Packet traces:MIT dump: with viruses and worms Berkeley dump: normal traffic
Scanners:Generated one pass scanning DFA scannerA NFA-based scanner PcregrepA repeated scanning DFA parser generated by flex
*
Grouping Results for Patterns in L7-filter (70 patterns)*Results of grouping algorithms for fixed total memory Sum of individual DFAsNo extra memory cost70/12=5.83 timesless processing per character6.83MB of memory70/3=23.3 timesless processing per character No grouping
Total DFA state LimitGroupsCompilation Time (s)3533703533125.6024000107.3356000813.1898000637.09810000537.92816000441.87032000349.976
Throughput Analysis*For Linux L7-filter (70 patterns)Using PCs with 3Ghz single core CPU and 4GB memory
Chart2
6.76219.228462.862690.821
6.93216.858481.024728.327
Without Grouping (70 DFA)
10 Groups
5 Groups
3 Groups
Mbps
protocol single
033
125
234
314
446
511
622
742
813
925
1015
1135
1240
1321
14120.0755.080.640.64
153616.6740.56133.36324.48
162589.42144.9715.361159.2
1713
1818
1917
2014
2124
2218
2375
2437
2521
2631
2712
2839
2926
3037
31134
3225
3362
3426
359
3612
3725
3842
3959
4015
4116
4235
4326
4423
4519
46164
479
4844
4928
50617
5162
529
5367
5460
5513
5623
57120
58116
5911
6025
619
6220
6329
6413
6575
669
67267
68182
6922
snort single
053
146
224
373
432
532
69
79
817
925
1026
1111218
1211218
13271
14110
15219
1667
1719
18226
19538
2034
2145
2241
23112
24140
2542
267
270
2874
29109
3038
3141
32109
3323
34325
350
3631
3751
38321
3935
4039
4128
4229
4320
44441
4511726
4611726
4713
4814
4910
5039
51110
5220
53443
54314
5514
560
57510
58265
5916
6014
6112
62168
6320
6426
6511
6622
6731
68522
69510
70510
7113
7232
730
74275
75275
7620
7715
78142
7920
80441
818
821020
838
84110
85278
8615
87109
8813
89441
9045766
9145764
9245767
9345768
9445770
95110
9624834
9724834
98110
9959
10060
10114
10211
10313
10421
105441
10610
107131
10896
10922
1108
1118
11215
11316
11479
11515
116110
11714
118111
119109
12011
12134
122110
123110
12420
125203
1268
127272
128109
12978
13033
13134
13237
13328
134116
135115
13614
13719
13820
139110
14015
141116
142117
143113
14415043
145259
146210
14715
14811
149115
15020
15113
15213
15341013
15441013
155110
156120
15724
15813972
15913972
16074
161442
16250
163114
16422
165282
166114
167266
168110
169111
17059
17161
17214
17313
17414
17520
1768009
1778009
178265
17916
18014
181536
18246
18346
18430
18510512
18626
18732
1886
18917
19060
1916
1926
193110
19415
19512
196110
1971035
19812
protocol pair
Note: the diagnal is the single rule dfa size
1 DFA3325341446112242132515354021123625131817142418753721311239263713425622691225425915163526231916494428617629676013231201161125920291375926718222
Rule #0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
1 DFARule #2 DFA
330335563431094051714254441796950416554425046435347104665060416855661665895603841547188445160555248193381236164691389615242521541624054384958421043829621151
2515525893589498911032653626361533357463438363545391547042623389501571544583473139102211148363664514676190301044876924428871216154142138336530414836943342133344
3426389344418685230189537345503706242665543686244544816178511354293663062088915495404717811926545587156531451963919698284151841169244909924630641733950100451234543298452
143433544145621315223352545503122463523282624342885473141224936471443572361922355169252645363329174185438627721977702333130126213518303923851927719232
4641098918656469718518762131574158274548067557263566660255126638654263712572018616391529021244424457661447669122317512029216744075417524710575284298601295162885712854598678112
115404985219711705525322212247281943322035262131258244283819463310316349100521919324866222942333026171169355733177171101253259175203183216275120912027441746
2265189230311857022607443335358393054433182673242369355394930574486198891269127304363773379534441371822612392635804913112481481851802943263893311392728549474
4277111018952187556042736352185785950746351887352625611375596950776475228109176114475062809753787364615720247176118655100581892245110226932649634758104511434730548860
13842325323622574731352241474941214534222524233227140573050217239139141326935192652781222423503532611761866357321641674793642127123205218293623822140725631
2595465733513132436352253629561433357463460563545399658425233604758180681057030324663803664564744401853015471638834810618834441641723245304168341143028820643
15104436452557223352243615160513223473624292825352986483242235037481453673372023365370262646373530175205539628732078712435131127223620314024862027820033
351117926350345415122531851472951603589238448556462121034557491401465285433985912237626138027541130283522137461642498426951302404572675005140773344161495363536514129840552594425940868712347
4012696170508247587849615189405748726149545350605411173576748756273170619862454861789551527162595520045806465398451039649591561524761455665491114530321858
211350536231742839594143322385721295342304645314135925438482956435416253905426304259763244524340361812672566347937958830441481442843263757301033428421239
1214413342225419305021332344482912443321262622322683452939204734451423370341720335067232443343127172175236625701775682131128124193317283721831727519130
361565576646804354744557478572534436574550494656501076953634471586916657955841445774914749675855511964176606499441999245551521484357415261451074129921654
2516544655356732436334463656614233572534393835453996584252336047581554683473033466380363756474440185306549638833088813444141137324630415034963028820343
1317423443235520315122342446493021453413272623332784463040214835461433471351821345168242544353228173185337626711876692232129125203418293822841827619231
1818503868287235828825602921254462650392718292838321516435552695431461463774392434721571332928614942691912378407472142182944647138134286023344129872641534440
171946366226632667732456281035345264938262917273731144613456257642111145367338233043781082827543936531792161397921292078773948131127245621334028862541328635
1420433544245621325223352545503122463523282714342885473141224936471443572361922355269242645363329174195438627721977702333130126213519303923851927719232
2421534554346631426232453557604132564533383734243895574151325942571544582462932456279353655464339184296448637822987803343140136314529404932952928720242
1822473948286025365627392949543526503927323128381889503545265340511473976392326395673293049403733178235742631762381742737134130253923344327892328119636
7523104154161852558293113140968614011192831079684151144859589751089210283108971082711601971638083961131308616110697948923480301163688133136194345849425927783968091156842018033725393
372466707847126445575575848146735445695846646147575010837546445725970182731097542455875924869685956521974214576650955311117546561691774458425373461194230021555
2125504251316328395930423252573829534230353431413592542148295643541514279432629425976323352434036181266145634792683773040137133284226374630912628419939
31266062135418638496950524285674839635240555641514510264483139665364171629963363952698642536253504619136816564489451049740501571533852364762401123629438949
1227413342225419305021332343482920443321262522322683452939124734451413370341720335067232443343127172175236625701775682131128124193317283721831727519030
39286889934926346577772605039875564771604895764959531087256664739617222396141110444760779450120706170531984432699652976812642248582042605860445588481334430121757
26295550663671334464394737596243345847354342364240975943533461265915950875131344764813741574845411863169536398434928535451451413347314255341003128920444
37306615730647257103867513958481227354456958461461114757511087054644572593727215420915942455875924813768595652197422371571175199932092351158825225344584253149462034230076155
13431166154208144201163198228141180145376170162142166155143146145144154147271182151171141223159272134153196154140153224363269145144180168161185315139217156887351137201231174163260255147179139150157145203142535467158
253258458935864989109326836261615333574634373635453916073426233965015415325854631429921414736356957507620130993576824228901156054147139366830414836943342035747
623395831547216310012617669105733809890709583717473728276197109799970141872091968562886879187480198738110793861132376719788834329651272311119118919776105677885731317046036485
263460479536915291114357037275625434584735393836463916375436334110511591544688263244110225142373773605978204311004977626230931246355151147397031425037963442535549
93538314019521927471930204145261741301824231929238042263617443142140316832917304764202240312924169145034622671573661829126122173014253518811427219127
1236413947229019305026322313048302044332134302232268345293920473445153427944171233506723384334312717217102456257022801342131138146192917284221881727519230
253754102178352123243625246362836142335746347243354539965842523360475822499187110303325638036585647874018530196111638833620326034442963854946304198341263028856643
423871211119514444863807863535227859507463511577852625611375596950776475363214480225475063429753140736461572024644223865410370455592529068296649634658104512054730532875
5939881482656924466779712280701379576679180681331086979731309276866794819226914719814264678097597012990811847421964209153672117902042236878266310143806475149681916432241977
1540443645255722335324362646513223473624292824352986483242235037481453673372023365370152746373430175205539628732078712434131127223620314024862027819333
16415136582666297978236426164524424493725282726363016169335324120411371443581372238581401292716695043661992168387371781984844045148144296421323927852442233940
354260647145144425373505646249715243675644615445554910668526243705768180691077340435673904669355754501934016772648934610421544541671874456405166441124029821353
264355515636763344643547378462433458473549393646409759435334614859168579360313447648137505726454118631124606398431891543545154152334731425135973128920444
23445246533369304161324435269594031554432423633433794564050317045561615086592931876118434435445233818328133536368128861653242149145284428394832942829120441
19454876145291222637576140305155362751402869532939338952364627534152185761137824274057743066504138191782410879632773911811128531721672640243580281252428136837
16446193190196174317171182202176185175302200181172196185173191179174184178234197181191172198186197315201237204169172185202219175199193186183178164169366204777222171231431173183300331171185169180191173235169422342182
94738303918511626471830204045261741301823211929238042263617443142139306731141730466420214031282416994933622671472651828125121163013253418801427218727
44481231041965420293123176661545545780725276655378615464573011456181523266923721799197100501021964422095568167124133108366494410824203975121427410673364386971544960995513352727464130
28496148983892559211835713926764563660493740393848421637645653699531571563588493445111238153393872605379204331082877724531931246657150142397133445139973642335550
617506467692841627167473363565573263862850056536346256496386267477926276376316886506346446256526391175887768834776622625638654672628737648639636632777622242077761767571184925596266369269876246386226337856268026228801373635
6251912445187240717780100164837314098797094837121412972827613395798970978419935124232926267708310311773178938481772226739724567562106289341718236133369836778246712646732588380
9523828411954174958164820774537174130182120192923136532645176834931372865301522367090201946312839171145131711106970672842123119164814253220781740323527
67539687169771751101311897410678334103957599887682787787811941118310475126922092019012793738020345520478841048986118231722149384928970672461239618619474106728390781347546137185
605415212124470247125124224791887141696886892816994777080743451757797684228523523111523112466134260592223718421515416511143165274124255934167246601408941443412918765761157114968763493159
135542619023105328151363424149493021453422463923332784463040214835115174601116318213452682440443532281731810666626712812314013331862162034182963221031827638831
235652549933755948102424435535944315544324748334337945640503158458816354915529314490783445544542531832873576368242968933231491453144283958331042928630145
12057154142246130284175185269127164131635156148128152141129138131130140134259169137157128204145252260147189151126138296682266131148167154149172300125364150926361123186414186149120274133164125136143131189128520444143
11658162138306126298203180326123172127365152144124148137125134127126136130277177133153124260141253255139197147122146385966310127144187152145167331121386142987333119194434216145274116132172121132139127185124525436151
1159403341216018294920322214147281943322028242131258344283819583344147367639171949491432229443328261711697396246916741292031133132113216273620821627919529
25605465733512932436352453629861433357463460563545399658425233604758179681057030294663803664564744401853015471638834810618734441641723225304168341143028820543
96138303918511626471830204045261741301823211929238042263617443142139306731141730466420214031282416913493362267147265182812512116309253418801427218727
2062494150306227385829413155563728524129343330403491533747285542531504178422528415875313251423935180256044633782583762939136132274125204529912528319838
2963584810039885193104366840259655737615038414039494315673466237885514915748855035429810414940396651488019134995178524632901156358143139366834452940983742329447
1364423645235720315123342444493021453422292823322784463040214834461453673371821345168242744353228173185539626712078712233131127203418294013861827619931
756510494123851289113914382114862591111038310796848786859589201119911128313310020320394131968188126205191868511297941252358013397802264781341491031041891858211480919886758346134193
96638334519542027472130204045341741301826251929238042263617443142142337034141730476420244031282416914523662267177568182912812416301425371883927219627
26767296421432277598274285305407288278868303284275299288276415413277287281337300284294275301289300535420460425272275288305322278422298289291281422272727423880325403461763276286520525279288272283423276461272267462285
182682113339841926784174944882562062007122182121912162031923442861922021962532151993891902172047614673573643551911925663284191933392132042043683421874643551373883235371493388301444436195205187198294199341196462182265
22695144523211246746031433334758393054433140353242369355394930574455158478549273043757733405344413718227130506358027851593145143151294327384731932728526522
snort pair
1 DFA5346247332329917252611218112182711102196719226538344541112140427074109384110923325031513213539282920441117261172613141039110204433141405102651614121682026112231522510510133202752752015142204418102081102781510913441457664576445767457684577011024834248341105960141113214411013196228815167915110141111091134110110202038272109783334372811611514192011015116117113150432592101511115201313410134101311012024139721397274442501142228211426611011159611413142080098009265161453646463010512263261760661101512110103512
Rule #0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
1 DFARule #2 DFA
5305310725525417727727070661301001126711267320159268116682755878394901611891045601231588790158843740801003708488777869490117751177562635912515969492363630559314656361217828860848057155955962810324324696419169490571069571593276415862490458154581345816458174583215924883248831591081096360627049059180145715757646512864159631601586083159159692525733215812782838677165164636869159641651661731509230825965601756962624106241062159180731402114021123491991637133116331515916010811063626369805880583146563585959579105617581556610955551596461159108461
4611074628222056896896868591227030341303419630354174501096175261969476878336884764129490116354046712035401451147107318111463777970711002211308493084993565213235411372213113455601914196235856545500627153104712618191411914153461099799979137574637622211503996850354196751333540592211InfInfInfInfInf3541InfInf3642155215911325393612211523562243763505057134121563541132354235405346335413541137818509941187120462463466683547354656137138354157354735483696Inf94857441975337031379393InfInf3541371064InfInf11622122671561009603354594663541368115521629132935662InfInf962358561995987739534105523797248591384848354157523541Inf52
242255282243691301303737122691952672626726162259012562063912423114546561743851258270945851512205852311677057771670572025051882577277212772186906019259052258718103402990152088796624019219141205199316329902990127121016991699528477862257728619928590144384585702577InfInfInfInfInf590InfInf681284290886075199257730675506612828868099146590885955854213159059052544281698448981261311461946876867911311359084687688745315481622119017099749527575InfInf590759198360983609894258254017019715726101404590686284295887579952430824308152088792751274195109214628526626373532828590571165906239116
7332541220536973102102797986107115737716377163401792881368829560710311411023212091969760143178107182217811052474010012024701041702979889510383363833682837918351798951238383057933485838123786011478096813772721579579452101025322532898421189510773229771792427841788251084022877458225180539772881794234342343179128129838082916510792001659797777848514845317983180178801031791798923527724784497147102103106124818518483888917984185186232130069328279465802321898282Inf78716179232110623026530265143511265418395935118324151791801281308382838919692196923348583268521731159936037951522758620017575179843921791104392
32477268913010232323333261474131325513255593139451500473666781661771735414656333501021386752313841873102132647271824771661712024931357913579152190108610139484933434205392942011661274873384031063724489415395391896007157154818417116249336144936139684147138129493482394881747985477534735113925439254394378889151621303574933837135838336361861431071901391511401381306313913948609366981055106626366430437437166254267139184437437541155867132392501865414813013042384423841395413921523915239102493102237336331114367213943888901511301662599550955029420116694268975581282954556344566534341391181661391389166
32577268913010232323333261474131325513255593139451500473666781661771735414656333501021386752313841873102132647271824771661712024931357913579152190108610139484933434205392942011661274873384031063724489415395391896007157154818417116249336144936139684147138129493482394881747985477534735113925439254394378889151621303574933837135838336361861431071901391511401381306313913948609366981055106626366430437437166254267139184437437541155867132392501865414813013042384423841395413921523915239102493102237336331114367213943888901511301662599550955029420116694268975581282954556344566534341391181661391389166
9670683779333399232641112331123327611522485242315433950461271455712079115435611534340036563364054333425447117411174119201654115254483191905152712119171733541163746537515515283702902902520147254471310351311529320115184474578145781457824578345785115248492484911564651916183644715136101371313202184301151911611517391151152521813287124833839424312112019242511520121122128150582762154325130251818410314103111513539139871398779447791193728711928111511664661918192580248024271211955166523610538324811227811111152028115104428
9770683779333399232641112331123327611522485242315433950461271455712079115435611534340036563364054333425447117411174119201654115254483191905152712119171733541163746537515515283702902902520147254471310351311529320115184474578145781457824578345785115248492484911564651916183644715136101371313202184301151911611517391151152521813287124833839424312112019242511520121122128150582762154325130251818410314103111513539139871398779447791193728711928111511664661918192580248024271211955166523610538324811227811111152028115104428
1786659122862612612323176339112311123128412323280322395514758541251535520087122515412236338044643344852414233454117391173926272352123334563272705232782927251813339243544535523523264502882883328155334542110332112329128122264544578045777457804578245783123248472484712372732724263445423144109352121282992281232712412224471231233321621286122914647504112912827323312328129130128150562722232924129332626410264102612313637139851398587455631273529512727912312472742726273380228022278292754959594310525394519307319191232825123104825
259130122691074747262663258611298112983021442401314024755955666222219710628095143591011431233830527237956994950574791180311803645043991445447933535054429947454319986864110591580544544726603333335446163414792911302914433674143474794592846041458964586745828144248972489719393947836628747931153132952929467110072144781451434668144144542632934517599676858881471464550511444614714821015123374244125641865462604108341083144178841403214032954793311389830313532414419493957862455181248124299474559411980641066260109273814627271443769144113868
261010070195115741341341413986262083120831500318783887894138941013456676320062569772909618773057918778159640531175956575950516189502133921339543632781878978952588236098784996383634288640473361511042698789878332990531453149737244242895030210533018785042751877388950InfInfInfInfInf1878InfInf19798588787433544289503218991379423030377610135187874187918773330118781878972243052901481003003013044818841883367980187837188418852009250035048387876332013975454InfInf1878202344InfInf96895122213661499518824928187819998588977454364226893268934996383610310664823341053225452283910028281878373218782138432
1121811112673034126726377161325513255112331123311231112982083111218InfInfInfInf1128211233InfInf112481125911255InfInfInf11221011288Inf12010InfInfInfInf011245InfInf11249Inf11242112432600914238InfInf239721122811224InfInf1130414240Inf112280InfInf112301122811226Inf178402182211225Inf23296InfInfInf14289120040InfInf1130411229Inf112341423811222Inf11222InfInfInfInf1122914238InfInfInfInfInfInfInfInfInfInfInfInf11225InfInf1423811224InfInfInf112221122211229Inf1129315805InfInfInfInf1122512006InfInf11304Inf11222InfInf11292120051200612009InfInfInf11228InfInfInf11229InfInfInfInfInfInfInf11225Inf11304InfInfInfInfInfInfInfInfInf1128814239Inf11328InfInfInfInfInfInfInfInfInfInf1122811234InfInfInf1123011228InfInfInf12348Inf11757Inf1122011231Inf1122011220Inf1122913780InfInfInf
11218121126730341267263771613255132551123311233112311129820831Inf11218InfInfInf1128211233InfInf112481125911255InfInfInf11221011288Inf12010InfInfInfInf011245InfInf11249Inf11242112432600914238InfInf239721122811224InfInf1130414240Inf112280InfInf112301122811226Inf178402182211225Inf23296InfInfInf14289120040InfInf1130411229Inf112341423811222Inf11222InfInfInfInf1122914238InfInfInfInfInfInfInfInfInfInfInfInf11225Inf183451423811224InfInfInf112221122211229Inf1129315805InfInfInfInf1122512006InfInf11304Inf11222InfInf11292120051200612009InfInfInf11228InfInfInf11229InfInfInfInfInfInfInf11225Inf11304InfInfInfInfInfInfInfInfInf1128814239Inf11328InfInfInfInfInfInfInfInfInfInf1122811234InfInfInf1123011228InfInfInf12348Inf11757Inf1122011231Inf1122011220Inf11229InfInfInfInf
27113320963016223405935932762762843025003InfInf271375485333285492804300311307222034068887274034137630585483764567334880298318334843028044295296287708InfInf280281277817737728771058128107775322832812794353554499327840466183339277777771802299033930339302872824092877082753443527537733441282376280708InfInfInfInfInf377InfInf377326327281278280380270827739836340572752752822833461803377281378376278301377377287315462753368522551345300301304547838338228128628737728238338422354Inf526477181627822651287280280InfInf377233774524InfInf34170911108381403754938133429377378326328281280281287InfInf532283281Inf9859313297Inf29365202732848919273273377282155037713021550
1101415935415901791391391151151231441878InfInf375110324172124331643139150146536424532661130180215144308321517545481013715754771412891134135126547InfInf119120116302421612654942012006163711221201182741365186811715452278576461661670513805611561112612124812654711462721142165434121215119547InfInfInfInfInf216InfInf2161651661201171191457547116237202155611411412112218570621612021721511714021621612653591145521788218413914014320412222211201251262161212222235364Inf3653167181175364126119119InfInf21653641711InfInf180548423922015363882205422216217165167120119120126InfInf37112212056923614152136Inf132245911212332981121122161216092161141609
21915268745012562884514512242242322403887InfInf485324219281233440752248259255161593516875222028932425365923243563206400246266206362506200243244235656InfInf228229225633332523565852922907254802312292273832774387722631544787210237257251414247020970209702352303572356562232153122332520593230324228656InfInfInfInfInf325InfInf325274275229226228296665622534631131652232232302312941415325229326324226249325325235205182232078117291293248249252425033133022923423532523033133216254Inf474425142822616439235228228InfInf325168853520InfInf2896578289329314549732920581325326274276229228229235InfInf480231229208517623261245Inf24150682212326907221221325230121832512501218
67161161092061365005008585801318911282112823331722816770277589859692176202105690137172101104172863880941143849810291928350411789117897677731021738350637777057332879777523183897485945855735737695033833883782058350471108371173341781727650445830458274583045832458331732489724897173122123777476845047319415985717178791427817377174172749717317383266713371721419596999117917877828317378179180178151063202738174180837676InfInf173185871403514035137505114177853451773291731741221247776778380728072328797759910910993105758995698012369691737875173109875
19176861398847472424324041112331123328512423370192285403647431271545722089124535612438340046663365054434435456117411174128292554125354583292905252803129271833541263746537525525284702902903530157354562310352312529330124284564578145779457824578345785125248492484912574752926283645625146111372323303194301252912612426491251253521823287124934849524313113029343512530131132128150582742253026130352828410284102812513539139871398789457651293729712928112512674762928293580248024280312955161614510527414721327521211253027125105027
22618275752612422953663662312312392473894InfInf492331440277228226539220142583524161663616882229029633126065993313570206470253273206432576207250251242663InfInf235236232634033224266553623607324872382362343902781388423331614794210307327321421254020977209772422373642426632302153823033220600237331235663InfInfInfInfInf332InfInf332281282236233235297366323235331831722302302372383011422332236333331233256332332242205252302078817298300255256259425733833723624124233223733833916261Inf481432143823316446242235235InfInf332168913527InfInf2966648655336315250433620588332333281283236235236242InfInf487238236208587630268252Inf24850752282396914228228332237122533212571225
5381958719694311460767867854354355155910134InfInf804643752589540539538563311122914049862673181145410608643572175196439186Inf0565585Inf56916503562563554975InfInf5475485441663664455497784854801044799550548546702714910124545815312594Inf1044104436055660InfInf554549676554975542Inf542644Inf549643547975InfInfInfInfInf644InfInf644593594548545547765397554466563081645425425495506133606644548645643545568644644554Inf542InfInf6125675685711112165064954855355464454965065150269Inf793744362254551078554547547InfInf644530839143InfInf608976223836488144816648Inf644645593595548547548554InfInf799550548Inf20110580564Inf56013187540551Inf540540644549309764415693097
34208376541031661663939475556112481124830013924885362201563334545014216972370104139687113953355061813516569585950471117561175643444069140504733444405402954644421985056415261552540540436203053055045172504713810503814030845139434714579645794457974579845800140248642486414089904441435147140161126523838454610945140441411394164140140502333830413910863646758146145444950140451461471451507328924049411475043434104341043140152541400214002104472801445231214429614014189914443445080398039295464456676766010542566236479036361404542140106542
4521948765114177177505058666711259112593111502599647425811122544553153180834801151507982150643660729236276806970614821176711767545551801516148435555055130657555320961675263725635515515473031631661561836148249106149151319561505448245807458054580845809458111512487524875151100101555254624825117213763494956571205615155152150527515115161244493151501197475786915715655606115156157158156150843002516052158615454InfInf151163651401314013115483911556332315530715115210010255545561805080503065755577878771105536773475810147471515653151107653
41229083611101731734646546263112551125530714625592433524914050534114917679440111146757814660362068883587276656657478117631176350514776147574803515105473025351492055763485968559547547506903123125752179574784510574514731552146504784580345801458044580545807147248712487114796975148505847847168133594545525311652147511481464871147147572404531114611570717465153152515657147521531541521508029624756481545750504105041050147159611400914009111479871515931915130314714896985150515780468046302535157383836710549636943549743431475249147107249
11223161368874323215415411271271252222006InfInf22203536416159176127161664986214215314911213625363311501825363394349453631949321550139226232147143303213613710162271InfInf6271221183343536418922732695412204855022196124122120107581487199711917282411838348550485508203880276762767618912383781282271116Inf11653642723164053631212271InfInfInfInfInf5364InfInf5364143714896391194301580227111853857901168011611612364118782353646395365536311939053645364189566511627568978218638939039321715370536912264464553641235370537110726Inf211211615084711910728189430430InfInf5364107331837InfInf182227244512221722232185368266825364547714371652639430122128InfInf22196124122Inf3762914452Inf3542593114125535111411453641237235364Inf723
1402418947648512094654651451451531972569InfInf4062453512021543616731691801761362514044051430210245174419424523898717016718787131713946164165156577InfInf1491501464079246156579450150064640115215014830418882559147212431099028646646103216808903890315615127815657714495361442468670151245149577InfInfInfInfInf246InfInf246195196150147149200857714626723221351441441511522151033246150247245147170246246156891814487871064521416917017327882522511501551562461512522538400Inf39534610451478442156149149InfInf24685262346InfInf210578538725021154182508658246247195197150149150156InfInf40115215089284865182166Inf162331814215344371421422461519082461171908
4225104129258196963363357575510677InfInf8887326668751055768821811472837936334405424501123265429149326514810816069199108047310866671021775422694226991524815032661201777104705201766688805452505074708549112929562176661766656423089668966120534278581775463719246326691571293265541775InfInfInfInfInf3266InfInf3367143014661284989721775483287215476464653130117593266128326732654942532663266120439469415277116424425428863272327152133134326653327232733636Inf877268661014936421208989InfInf3266365778InfInf11217764681521158874327089563266340314301501128895258InfInf8880545218643122873492Inf3499444551724444326653543266Inf54
72656492776353512122028291122111221274113222692222954137484411514345707711241441122632803454324384231322344411729117291617134211323446317170513268191715171232914253452551351316350278278231814523444111023111132811811216444457694576745770457714577311324837248371136263171416244441313499251111181982181131711411214371131132320611275112813637403111911817222311318119120116150462622131814118231616410164101611312327139751397577445531172528511726911311462641716172380128012268191753949493310515293592063991131815113103815
0270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
74281231169414310210279798795961128811288341180289137892966081041151111822101127707417810811117893395010012039110410997988951011796117968283791091809051338484058033586848223890968192101592580580831020345345908521290511781090781803488517983511458364583445837458384584018024904249041801291308481839151180201166927878858614985180841811798110418018090273783431791481031041079818618584899018085186187184151133292808581186908383410834108318019194140421404214451212018492352184336180181129131848384908079807933586846061161161001058296102768713076761808582180110582
1092915835405851781381381151151221431877InfInf376215324172124331643139150146536324532651120178109143308221317535480013515554761392890132133124545InfInf117118114302321512554841911906153701211191172731364186711615442277576361561570413705610561012512024712554611362711132155433120214118546InfInfInfInfInf215InfInf2151641651191161181456546115236201155511311312012118470521511921621411613921521512553581135520788118313813914220402212201191241252151202212225363Inf3643157171165363125118118InfInf21553631710InfInf179547423821915353872195421215216164166119118119125InfInf37012111956913613151135Inf131245811112232971111112151206082151140608
3830874671511076767434351593051201012010305144253101532605726879753941744294101081433834614333959006585586693056263544751241512415474844424144544773484805442995048462022662954528831079454454415966056256254491765447542130242144543491434747546878472044674146620464221442514025140144939448454727947544165130299424249501131601444814514345681441445446842551662112676871310150149485354144491501513941539929324417245394544747415534155314439429614492144921084767701482793161485311441459395484748548821882129950488014618064117126041240514634040144491421441069142
413190120220182252352356565410179InfInf8548308365921045665991751971827834944194149440111308234641308213810467068192104557210265669843393866538665855147137308311243411008751017083854153514948416782481048911564170831708352340091639163112524067574339453614645308388551223082524339InfInfInfInfInf3083InfInf3184129813331214885694339473104210871454552123116563083121308430824834230833083112436459120269115341342345833089308851126127308352308930903497Inf84436583974835031128585InfInf3083351875InfInf11143403911511048525308786593083321912981367121855157InfInf8541535118077119722395Inf28191435416243433083525130833644950
1093215835405851781381381151151221431877InfInf376215324172124331643139150146536324532651120178213143308210917535480013515554761392890132133124545InfInf117118114302321512554841911906153701211191172731364186711615442277576361561570413705610561012512024712554611362711132155433120214118546InfInfInfInfInf215InfInf2151641651191161181456546115236201155511311312012118470521511921621411613921521512553581135520788118313813914220402212201191241252151202212225363Inf3643157171165363125118118InfInf21553631710InfInf179547423821915353872195421215216164166119118119125InfInf37012111956913613151135Inf131245811112232971111112151206082151140608
233384145231110541841834343612381InfInf4567175435638638357091865364601949238914826093175333913817532355150501725499541204748728162418324030557332913517541348164535833089544560353331266263873084969589895489544233304441444113434226239816227191822717544176741753358162InfInfInfInfInf1754InfInf1855836854733053668162291775139969272734759844175473175517533033517541754134618274926327973343353388717601759337879175434176017611953Inf46323554783019611345353InfInf1754198175InfInf938163273133814572175840651754187383687173533339InfInf4560353394111416263693153929799253616225251754343917541941239
3253437411471167724747317313403403383835964InfInf3348854812064038834020647Inf3553663623215587171081632803955480590104675480551532503526423Inf35696123493502756InfInfInf155933533199125481396InfInf3350Inf33547337335333118144233595833248817379InfInfInf21565840InfInf3963368719341Inf329Inf3295481Inf15825480334InfInfInfInfInfInf5481InfInf54811605165615813329584527Inf3315502Inf482832932933615834002455548115815482548033258654815481396Inf329InfInf39958558658965335487548633515861587548133654875488InfInfInf206312808332Inf396958958InfInf5481Inf5391InfInf395Inf135214354874Inf5485Inf54815803160519781581958335341InfInfInf337335Inf11747882634Inf540775732733815852327327548133618575481Inf1857
0350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
3136807357100213213363644525311245112452981372469446253565617268139167693401001356568135503520315239125068474845467117531175339403666137474703414105372924341391954753384958549537537405903023024742169474683510473513730542136404684579345791457944579545797137248612486113786874138404846837158123493535424310642137411381363861137137472303530113610560616455143142414647137421431441421507028623757381444740404104041040137149511399913999101469771414930914129313713886884140414780368036292434156373735710539535933448733331374239137106239
51371001817712026426456566472117InfInf31815726611466273585819288226218719954012015585192155172642305251997470158676865487InfInf59605619315767490361610557312636159215991195813613211092557557787905733573367621896748855222165515754546215660488InfInfInfInfInf157InfInf15710610761586010248857178143105555562631268015761158156588115715767650555706381125808184123163162616667157621631642267Inf306257152582273676060InfInf1572288111InfInf121489446161134329161532815715810610861606167InfInf3126361109801799377Inf73135536421853531576268157108275
3213837011463167024707277273363363343795956InfInf3348454772063638433620643Inf35136235832147871310804324039154765861045554765499Inf03912997432153339838345346274887805InfInf155133132799005477392Inf457813310Inf33539333331329118104225595032848697371InfInfInf21485800Inf795003923328715337Inf325Inf3255477Inf15705476330InfInfInfInfInfInf5477InfInf54771601165215693289504519Inf32754982473748203253253321571396244754771569547854763285825477547739240821325InfInf3955815825856525548354823311574157554773325483548432345Inf3095720627279232832738392950950InfInf5477337035383InfInf391Inf128724314862332395481Inf54775795160119701569950331337InfInf33539333331Inf11739951634Inf540774932333415836323323547733218495477Inf1849
3539847757104182182404048565711249112493021412509850257569657672143171733801041396972139543560507053333571515249471117571175743444070141514743454505412964745431995157425362553541541446303063065146173514723910513914130946140444724579745795457984579945801141248652486514190914542445247241162127533939464711046141451421404265141141512343930414010964656859147146455051141461471481451507429024160421475144444104441044141152551400314003105473811455331314529714114290924544455180408040296474556777776110543576337489137371414643141106643
3940887920217024774775454529959InfInf80442891620010254620716503698076303239461084201092890305102289012096120681589838713963648764472720627206804945104289111064499495490160918037514947454953604687647529160911609146299083818381110503819556447433387043289180931142890506447InfInfInfInfInf2891InfInf2992120812411134680546447452912198355434350115114482891113289228904630128912891110237438344174113300301304612897289649118119289150289728983035Inf79596191944630391108080InfInf2891304957InfInf1096448316149878023289579142891302512081273113804955InfInf8037514916793794863481054525165415212541412891504528913440945
284177705097166166333341495011242112422951342439143250562586965136164663109713262651324734904767345516328394246411750117503637336313444467338380534289403836192445035465554653453437560299299443916644465321044321343023913337465457904578845791457924579413424858248581348384383537454653415512046323239401033913438135133355813413444227322971331025758615214013938434413439140141138150672832345035140443737410374103713414548139961399698466741384630613829013413583853837384480338033289403856070705410536505630418430301343936134105936
294278715198171171343442505111243112432961352449244251563597066137165673209813363661334835004868346526439294346511751117513738346413545468339390535290413937193455136475654753553538570300300454016745466331045331353034013438466457914578945792457934579513524859248591358485393638464663515612147333340411044013539136134365913513545228332981341035859625314114039444513540141142139150682842355236141453838410384103813514649139971399799467751394730713929113513684863938394580348034290413956171715510537515731428531311354037135106037
2043691008889202202252533576126009260092871262358335242554506157101615610223089124549812472275604565274849874243204562702527025282925951263645933030052628132302818449622761715036526526354802597259736311583645724100862412623403112529457InfInfInfInfInf126InfInf1267576302729514572614711253242431329537126301271252750126126364162425832269449505365132131303536126311321331018Inf27522655271022362929InfInf126103257InfInf904581731306129813022811261277577302930362300523005281323047041016246210334273223311922221263133126105133
44144490221125775104934934474474544798950142381423870854765650445666397547148247822715771775444051054547543395458162Inf04674878780547164474644654564411517315173449450446144125474578807514510947702453451449605644589404487289110104811947947346146902434200545745257945787844531794455472437452546450878Inf131604InfInfInf547InfInf5474964974514484506446878447568533687444544545245351626075474515485464484715475474576664544570939128515470471474977755355245145645754745255355455016345696647885448552457450450InfInf5475578119InfInf5118791927955172807195511135547548496498451450451457InfInf702453451Inf16054483467Inf463115234434547739443443547452303354714723033
11726451177530849277213833613579135791174111741117391180321339InfInfInfInfInf1178911741InfInf117561176711763InfInf4226911729011796Inf1241538665Inf41832Inf011753InfInf11757272061175011751270251517311726Inf24988117361173238717Inf1180715175Inf117360InfInf117381173611734Inf1834822330117332907723804InfInfInf14797124090InfInf1180711737Inf117421517311730Inf11730InfInfInfInf1173715173InfInfInfInfInfInfInfInfInfInfInfInf11733Inf188531517311732InfInf19365117301173011737Inf1180116313InfInfInfInf1173312411InfInf11807Inf11730InfInf11800124101241112414InfInfInf11736InfInfInf11737InfInfInfInfInfInfInf11733Inf11807InfInfInfInfInfInfInfInfInf1179615174Inf11836InfInfInfInfInfInfInfInfInfInf1173611742InfInfInf1173811736InfInfInf12721Inf12193Inf1172811739Inf1172811728Inf1173714288InfInf14288
11726461177530849277213833613579135791174111741117391180321339InfInfInfInfInf1178911741InfInf117561176711763InfInf4226911729011796Inf1241538665Inf40305Inf011753InfInf117572720611750117512702515173Inf1172624988117361173238717Inf1180715175Inf117360InfInf117381173611734Inf1834822330117333010023804InfInfInf14797124090InfInf1180711737Inf117421517311730Inf11730InfInfInfInf1173715173InfInfInfInfInfInfInfInfInfInfInfInf11733Inf188531517311732InfInf19365117301173011737Inf1180116313InfInfInfInf1173312411InfInf11807Inf11730InfInf11800124101241112414InfInfInf11736InfInfInf11737InfInfInfInfInfInfInf11733Inf11807InfInfInfInfInfInfInfInfInf1179615174Inf11836InfInfInfInfInfInfInfInfInfInf1173611742InfInfInf1173811736InfInfInf12721Inf12193Inf1172811739Inf1172811728Inf1173714288InfInf14288
134762938682152152191926645423972239722801192287628235547435450627149911608211747851175715590395915514380363728449249882498813201682119294523232305192742523211774255205064304751951927410158015802924151294501760691711913272411822450InfInfInfInfInf119InfInf119686923202244450191401054617172425883011923120118204311911929409171570215874243465812512423282911924125126629318672682193420633292222InfInf11964350309423094283451134123502911231288119120687023222329190161901627425232635945539210263566152610815151192426119104425
1448635690831901902020275036112281122828112022977292365484455511221505217083118485111833335040603314449373829450117361173620141549120304533242405202752624221783036213241532520520234202852853025152304511810301812028825119234514577645774457774577845780120248442484412069702421233145120141106321818252689251202412111921441201203021318283119884344473812612524293012025126127124150532692202621126302323410234102312013134139821398284452601243229212427612012169712423243080198019275262454656564010522364216277016161202522120104522
1049595260791081081616234332112241122427711622573252325444051471181464813079114444711429331036563274045333425446117321173216151045116264493202005162712220181742632172837528516516193802812812621148264471410261411628421115194474577245770457734577445776116248402484011665662017192744716137102281414212285211162011711517401161162620914279115843940433412212120252611621122123120150492652162217122261919410194101911612730139781397880448561202828812027211611765672019202680158015271222054252523610518323812236612121162118116104118
395012513219218356106105454529978InfInf81773024633310254634016636698076334340791504201093023424137302313599120661939900701046364951441238717387178249453930241171441496284901622481705149474682668546101881697116224162245141808696869611750395255144124334181433024839111730235114412InfInfInfInfInf3024InfInf31251341137411646826814412453045231871434350118114543024116302530234642030243024117436438657266113419420423823030302949121122302450303030313346Inf809263241184633521178282InfInf3024336774InfInf109144133741491018167302882053024315813411406116824955InfInf8170514917085118829480Inf3499041521594141302450503024Inf49
1105115935415901791391391151151231441878InfInf377216325173125332644140151147536424632661130180215144308321517545481013715754771412891134135126547InfInf119120116302411011154541811906163711221201182741365186811715452278576461661670513805611561112612124812654711462721142165434121215119547InfInfInfInfInf216InfInf2161651661201171191457547116237202155611411412112218570621612021721511714021621612653591145521788218413914014320412222211201251262161212222235364Inf3653167181175364126119119InfInf21653641711InfInf180548423922015363882205422216217165167120119120126Inf3875537112212056923614152136Inf132245911212332981121122161216092161141609
20526913752894848252533549711304113042871262358335242554506157189156120230901255411212513439604767392511104445364571180711807293026117111204553282905262813230281841059727106102593526526754803463463631158364572410972412634931125294574588145932458654585445843126249102491012675763027291074572614711211624243132957612630127125275012612636274243462019449505399132131303536126311321331891512927522688271893629294109341093126191961404414044904582791309929813033712612775773029303681108110281323060713462461070342131223315422221263169126105169
44353492221325875124934934484484564798952142401424071054965850645866597747348448022735791777446051354847743415488164Inf0470490Inf47464494674684598801517515175452453449144145454554437514520949704455453451607644789424507291110124813949949346347102436200745945458145988044731814475492439454548452880InfInfInfInfInf549InfInf549498499453450452644888044957053568764474474544555182609549453550548450473549549459Inf44771139130517472473476977955555445345845954945455555655216347698649887450554459452452InfInf5495598121InfInf5138811845855372827215531137549550498500453452453459InfInf704455453InfInf485469Inf465115254454567741445445549454303554914743035
314543631134518103833433433193193273355882InfInf58142052937732953684834435535126954450104703170384419348100874195358Inf0341361457813459495338339330751InfInf323324320962841832875131432308205753263243224784169587232147497282462688208202109342045787457873303254523307513184677631842045363325419323751InfInfInfInfInf420InfInf420369370324321323446175132044140647603183183253263892110420324421419321344420420330402133184539626686388343344347644542642532432933042032542642727148Inf569520212232127533330323323InfInf420284785315InfInf38475213043424474059242444949420421369371324323324330InfInf575326324Inf11618356340Inf336766331632710502316316420325181342013451813
14556356348342421919273536112281122828112022977292365484455511221505217084119485111933335041613314549383930451117361173623242049119294523231405202752624221783036213241532520520234202852853025152304511810301812028825119234514577645774457774577845780120248442484412069702421233145120141106321818252689251202412111921441201203021318282119884344473812612524293012025126127123150532692202521125302323410234102312013034139821398284452601243229212427612012169712423243080198019275262454656564010522364216277016161202522120104522
0560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
510575591914129905795395395155155235449878InfInf777616725573525732104454055154748550646176665130580615544170836158954Inf0537557Inf54116091534535526947InfInf51952051616224616526949820520051077052252051867469659868517794512278Inf1016101635055380InfInf526521648526947514Inf514616Inf521615519947InfInfInfInfInf616InfInf616565566520517519745794751663760279565145145215225853506616520617615517540616616526Inf514InfInf5845395405431084162262152052552661652162262348944Inf765716351851749729526519519InfInf616516748911InfInf580948208806207936788620Inf616617565567520519520526InfInf771522520Inf19614552536Inf5321285951252317698512512616521300961615413009
26558314962315203342942942712712782994996InfInf532371480328280487799295306302221964018880268033537029985413704560335470292312335392968037289290281702InfInf274275271817037128170457527507702652772752734293547498627240396176344417717711795293033947339472812764032817022693594226937133453276370274702InfInfInfInfInf371InfInf371320321275272274379570227139235740502692692762773401797371275372370272295371371281315392693369622544339294295298547137737627528028137127637737822346Inf520471231427222643281274274InfInf371233684517InfInf33570311101375403054337533429371372320322275274275281InfInf526277275Inf9852307291Inf28765132672788912267267371276154337112961543
1659655888852012012121294738112301123028312223179312385504657531241525419086121505312135337043633334751404132453117381173825262251122324553262605222771621191803238233443534522522254402872873227154324532010322012229027121254534577845776457794578045782122248462484612271722623253345322143108342020272891271222612312123461221223221520285121904546494012812726313212227128129126150552712222823128322525410254102512213336139841398486454621263429412627812212371732625263280218021277282654858584210524384418297218181222724122104724
1460635679831661661919274536112281122828112022977292365484455511221505217084119485111933335041613314549383930451117361173623242049120304533242405202752114171783036213241532520520234202852853025152304511810301812028825119234514577645774457774577845780120248442484412069702421233145120141106321818252689251202412111921441201203021318283119884344473812612524293012025126127124150532692202621126302323410234102312013134139821398284452601243229212427612012169712423243080198019275262454656564010522364216277016161202522120104522
1261615466811271271717254334112261122627911822775272345464253491201485015082117464911731333039593294347363728449117341173421221847118284513222205182731917121762834193039530518518214002832832823150284491610281611828623117214494577445772457754577645778118248422484211867682219212944918139104301616232487231182211911719421181182821116281117864142453612412322272811823124125122150512672182419124282121410214102111812932139801398082450581223029012227411811967692221222880178017273242254454543810520344014256814141182320118104320
1686221755002402374874871731731811992886InfInf435274383231183390702198209205107583045074171023827320248412732662118140195215118101994549192193184605InfInf177178174468227418460747817806744291801781761682073287617423533536121476746741063196012044120441841793061846051721265517227411767179273177605InfInfInfInfInf274InfInf274223224178175177221560517429526023781721721791802431064274178275273175198274274184116921721190412590242197198201314928027917818318427417928028110802Inf423374137017510887184177177InfInf274110822619InfInf2386066447278234444627811755274275223225178177178184InfInf429180178120255622210194Inf190376717018151061701702741799172741199917
206382621928603383383535338640178401784035541365277483352781714950615714871888702309013642666713646342330479942255153444549644518348183484230266613651056447416930069653547323028207320382746457507696569652726003853385310531176136644524150922413653587571364326445InfInfInfInfInf1365InfInf14666516655627423664452613861046362424315895291365561366136427262136513651052182438351369426126226542137113703061621365311371137214902211136592765582714941054242InfInf13651504382693726937906446168130493552136935031365148065167856423036209742097435473230727160434283105262274622338822221365312613651532726
26648871191114740340341413986472182221822499318683877894138841012456676319972559852909618672958218678759580531195950576050516289402233022330553632851868978942587236098684986383634287638263359521041798689868342890530553059737243242894030210443018685036771867388940InfInfInfInfInf1868InfInf19698488687633554289403218891369433030377810136186876186918673329118681868972253052801511002902912944918741873368182186837187418751999254745038386878332003975555InfInf1868201345338353383596894125613664499618724922186819898488877655364227872278724986383610304674693241053324453283910228281868373318682137433
1165605341801061061616244133112251122527811722674262335454152481191474914081116454811630332038583284246353627448117331173320211746117274503212105172722321191742733112938529517517203902822822722149274481510271511728522116204484577345771457744577545777117248412484111766672118202844817138103291515222386221172111811618411171172721015280116854041443512312221262711722123124121150502662172318123272020410204102011712831139791397981449571212928912127311711866682120212780168016272232154353533710519333913246713131172219117104219
22668410420596837237237373510561InfInf404615453154853731618153526359172821241122509215442881041544844881049136486953874647617289290773010050322810115451067291474932079454039343230235346592922718558794579453528204414441410633199738728926171472615454142661544347289InfInfInfInfInf1545InfInf1646729745652948517289281566123253262633679737154565154615442928415451545106418264390231962832842876515511550327071154533155115521731Inf41313145672917371064848InfInf1545175257InfInf92729022113267405315494041154516627297606548323827008290084039343283481025233102103324673243512524241545333315451735533
316780711991377448448464644915123296232966183227847879446479412594617268241131099234010122773108922779673790581327371626455567111010238042380464413788227810211012728241012278617643413935364552387131
5226857126183163272194194153753753558010426InfInf3392757642102358553721030Inf552563559838390289562525059257637941156457639589Inf054911092Inf553752954654750364811InfInf30475325281697157645934813462685320Inf34441534532530121477507104175298558522InfInf40407880374853698859353390305384811526Inf526576436460307057635324811InfInfInfInfInf5764InfInf576418371889306952920507509481152857853095800652652653330715973052576430695765576352979057645764593Inf526InfInf5967897907931139157705769532307430755764533577057716391InfInf210143082529639559320502050InfInf576464059457InfInf5924812227566328552Inf576833672576466971837287230692050532538InfInfInf534532InfInf1124842Inf744134135245359138524524576453335435764Inf3543
510695591914129905795395395155155235449878InfInf777616725573525732104454055154748550646176665130580615544170836158954Inf0537557Inf54116091534535526947InfInf5195205161622461652694982052001016771522520518674696598685177945Inf510101335055380InfInf526521648526947514Inf514616Inf521615519947InfInfInfInfInf616InfInf616565566520517519745794751663760279565145145215225853506616520617615517540616616526Inf514InfInf5845395405431084162262152052552661652162262348944Inf765716351851749729526519519InfInf616516748911InfInf580948218396207936788620Inf616617565567520519520526InfInf771522520Inf19614552536Inf5321285951252317698512512616521300961615413009
510705591914129905795395395155155235449878InfInf777616725573525732104454055154748550646176665130580615544170836158954Inf0537557Inf54116091534535526947InfInf5195205161622461652694982052001016771522520518674696598685177945Inf101351035055380InfInf526521648526947514Inf514616Inf521615519947InfInfInfInfInf616InfInf616565566520517519745794751663760279565145145215225853506616520617615517540616616526Inf514InfInf5845395405431084162262152052552661652162262348944Inf765716351851749729526519519InfInf616516748911InfInf580948218396207936788620Inf616617565567520519520526InfInf771522520Inf19614552536Inf5321285951252317698512512616521300961615413009
13716253127452189189282826723314289142891802705141476281421360543545082010325616083704159527044221560407821484446373835346114797147972723195170575346321092303505179525232110632734203540403505350513153020872087752490529346117807617705183236704253461InfInfInfInfInf705InfInf806348355352028283461197265952917172437882270535706704201557057057521117207512287154155158357117102340417052471171282218104197714053420826752828InfInf705836311997019970833462105123351807709178370581334836135282329140071400717952523366853255162105191343915267316167052419705819917
327281461121101606037374566299120041200429913824795472545666273693881684233501021376634013733358405979580632995657484691240912409414238418138484713424205382934442401962602893928278853853815332055655648431704846936129636138537431374146946872471984673546614464161382513425134138878842394127346938159124293363643441071541384213913739621381384846236545656106616265304144143424748138431441453881539328723820239388484141415474154713838829014486144861024707641422733101425251381398789424142488815881529344427954557458117065440634454573434138431361381063136
073000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
275743249979169925327157152902902883335314InfInf3393056112097033829020977Inf305316312276768903896627803455610562916356104441Inf03025733Inf306838129930025972434InfInf1580285281869656113462436457872850Inf339472872852831204438535305282441437485InfInf208755602756792634628689052912434279Inf2795611Inf159956102852434InfInfInfInfInf5611InfInf56111633168615982821069410324342815632290643602792792861600350209156111598561256102825585611561134632212279InfInf3495575585615793561756162851603160456112865617561827829Inf313832096121202822813234610691069InfInf5611Inf4831InfInf3452435117803854408Inf5615Inf561160481633217315981069285291InfInf33947287285Inf10210987617Inf515684327728813976277277561128618335611Inf1833
275753249979169925327157152902902883335314InfInf3393056112097033829020977Inf305316312276768903896627803455610562916356104441Inf0302573379500306838129930025972005InfInf1580285281869656113462007457872850Inf339472872852831204438535305282441436988InfInf208755606792627534628689052912005279Inf2795611Inf159956102852005InfInfInfInfInf5611InfInf56111633168615982821069410320052815632290443602792792861600350209156111598561256102825585611561134632212279InfInf3495575585615793561756162851603160456112865617561827829Inf313832096121192822813234610691069InfInf5611Inf4831InfInf3452006117803854408Inf5615Inf561160481633217315981069285291InfInfInf287285Inf10210987617Inf515684327728813976277277561128618335611Inf1833
20766913752894848252533549711304113042871262358335242554506157189156120230901255411212513439604767392511104445364571180711807293026117126364593303005262813230281841059727106593526526754803463462083157354562410972412634931125294574588145932458654585445843126249102491012675763027291074572614711211624243132957612630127125275012612636274243462019449505399132131303536126311321331891512927522688271893629294109341093126191961404414044904583001309929813033712612775773029303681108110281323060713462461070342131223315422221263169126105169
157764578484184184202028463711229112292821212307830237549455652123151531808512049521203433604262332465039403145211737117372425215012131454325250521276272523179313722335335215212443028628683151523045119103119121289261202445245777457754577845779Inf121248452484512170712522243245221142107331919262790261212512212022451211213121419285120894445483912712625303112126127128126150542702212722128312424InfInf12113335139831398385453611253329312527712112270722524253180208020276272554757574110523374317287117171212623121104623
1427819146377782111711711471471551632442InfInf409248357205157364676172183179837827842781450212247176406724722628719016918987151733819166167158579InfInf151152148395224815858145215206484031541521503061761243214919979030648648905170089058905157152142103357814695381462488672153247151579InfInfInfInfInf248InfInf24819719815214915118815791482692342008146146153154217906248152249247149172248248158859714687871051821617117217526612542531521571582481532542558400Inf39734811681498441158151151InfInf24885262219InfInf212580547525219884202528660248249197199152151152158InfInf40315415289304738184168Inf164319114415543101441442481537812481173781
20796962628916216225253341421123411234287126235833524255450615712815658230901255457125393410476733751554445364571174211742293026551263645933030052628132302818436422738538526526294802912913530103320456241036241262943112529457457824578045783InfInf126InfInf12675763027293745726147112382424313295311263012712527501261263621924290125944950534413213130353612631132133131150592752263827133362929InfInf12613940139881398890458661303829813028212612775773029303680258025281323055262624610528424822337622221263128126105128
44180490221125775104934934474474544798950142381423870854765650445666397547148247822715771775444051154647543395468162Inf0468488Inf472644746546645787815173151734504514471441254745788075145109477024534514496056445894044872894811947947346146902434200545645157845644144531794455472437452546450878InfInfInfInfInf547InfInf547496497451448450644687844756853368744454454524535162607547451548546448471547547457Inf445709Inf515470471474977755355245145645754745255355455016345696647885448552457450450InfInf5475578119InfInf5118791927955172807195511135547548496498451450451457InfInf702453451InfInf483467Inf463115234434547739443443547452303354714723033
8815750287736361313212930112221122227511422371232305423849451161444611078113424511327329035553253943323324445117301173017181443114244473181805142692018161722430152652651451417360279279241914624445810241111328218112164444577045768457714577245774114248382483811463641815172544514135100261212192083191141811511315381141142420712276113823738413212011918232411419120121117150472632141915119241717InfInf11412428139761397678446541182628611827011411563651817182480138013269201854050503410516303610216410101141916114103916
1020821069399686199322914491449103510351033113021053InfInf344356272215311083103521538Inf105010611057Inf9536371921023010906271130236146627119182Inf0104722216Inf10513387010441045100863179InfInf606910301026341816272109731814677610300Inf35942103210301028126551509221044102717147InfInfInf807612960InfInf109710319538103631791024102010246272Inf6082627110303179InfInfInfInfInf6272InfInf62722345239760811027405816092317910266293Inf17099102410241031608310958080627260816273627110271298627262721097Inf1024InfInf1094129712981301Inf627862771030608660876272103162786279InfInf318982152281011027Inf109740584058InfInf6272Inf19070InfInf10903180Inf113017141368846276Inf62728198234543736081405810301036InfInf3594210321030InfInf18241360Inf1262Inf10221033Inf102210226272103170726272Inf7072
8835750287736361313212930112221122227511422371232305423849451161444611078113424511327329035553253943323324445117301173017181443114244473181805142692018161722430152652651451417360279279241914624445111024811128218112164444577045768457714577245774114248382483811463641815172544514135100261212192083191141811511315381141142420712276113823738413212011918232411419120121117150472632141915119241717InfInf11412428139761397678446541182628611827011411563651817182480138013269201854050503410516303610216410101141916114103916
1108415935415901791391391151151231441878InfInf377216325173125332644140151147536424632661130180215144308321517545481013715754771412891134135126547InfInf11912011630242161265494201200616371122120118274136518681171545576461661670513805611561112612124812654711362721111105434120214118546InfInfInfInfInf216InfInf2161651661201171191457547116237202155611411412112218570621612021721511714021621612653591145521788218413914014320412222211201251262161212222235364Inf3653167181175364126119119InfInf21653641711InfInf180548408022015363882205422216217165167120119120126InfInf37112212056923614152136Inf132245911212332981121122161216092161141609
278853279675144324276846842932932913365042InfInf3344154342059334129320600Inf308319315272318670915728103485433543885554334176Inf03055454Inf309809330230323402437InfInf1327288284839154343492439453632880Inf334532902882861176735875036285414236460InfInf18325370InfInf34928986722942437282Inf2825434278134954332882437InfInfInfInfInf5434InfInf5434155816091348285818383524372845455279040902822822891350353208554341348543554332855395434543434931765282InfInf3525385395425519544054392881353135454342895440544127383Inf3091420584186628527684349818818InfInf5434Inf4561InfInf3482438114873884135Inf5438Inf54345709155818841348818288294InfInfInf290288Inf9905852588Inf494655928029113410280280543428915795434Inf1580
15866413384841471472020287475InfInf2821212307830237549455652640151129180851204912212074158204262157046114394031452InfInf2425211171213145432525052127627252317957772266307052152136430159915993126153314521860821812013491511723451InfInfInfInfInf121InfInf121707125222460452211421076319192627903812125122120224512112131608191586309894445488112712625303112126127128643Inf2702212822649312424InfInf12166469InfInf854531711256629312513031211227072252425312502225022276272526511355741Inf3793172814417171212633121104633
1098715835405851781381381151151221431877InfInf376215324172124331643139150146536324532651120179214143308221417535480013615654761402890133134125546InfInf11811911530232151255484191190615370121119117273136418671161544576361561570413705610561012512024712554611262711122145433117109117545InfInfInfInfInf215InfInf2151641651191161181456546115236201155511311312012118470521511921621411613921521512553581135520788118313813914220402212201191241252151202212225363Inf3643157171165363125118118InfInf21553631710InfInf179547423821915353872195421215216164166119118119125InfInf37012111956913613151135Inf131245811112232971111112151206082151140608
13886259708212912918182647381122911229280119228762823554743545012114954160831184752118353340406033044503738294501173711737222319511192945232323051927425232117732382034532519519254102852852924151294501610301611828823117134484577645774457774577845780119248462484611968692320223345019140105341717242588271192312011820431191192921417282120874243463912512423282911924125126124150552682192820125292222410254102511913136139841398483451631233429112327611912068702322232980218021274252354658553910524354415267215151192424119104424
44189490221125775104934934474474544798950142381423870854765650445666397547148247822715771775444051154647543395468162Inf0468488Inf472644746546645787815173151734504514471441254745788075145109477024534514496056445894044872894811947947346146902434200545745257945787844431794445462437451545448441InfInfInfInfInf547InfInf547496497451448450644687844756853368744454454524535162607547451548546448471547547457Inf445709Inf515470471474977755355245145645754745255355455016345696647885448552457450450InfInf5475578119InfInf511879Inf55172807195511135547548496498451450451457InfInf702453451InfInf483467Inf463115234434547739443443547452303354714723033
457669045815InfInf84022482394823945781457814578045928InfInfInfInfInfInf4583045781InfInf457964580745803InfInfInf45769045836Inf46878InfInfInfInf045793InfInf45797Inf4579045791InfInfInfInfInf4577645772InfInf45881InfInf457760InfInf457784577645774InfInfInf45773InfInfInfInfInf468720InfInf4588145777Inf45782Inf45770Inf45770InfInfInfInf45776Inf45766InfInfInfInfInfInfInfInfInf63401Inf45773InfInfInf45772InfInfInf457704577045777Inf45841InfInfInfInfInf45773InfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInf
457649145813InfInf87745488174881745781457814577746041InfInfInfInfInfInf4582745779InfInf457944580545801InfInfInf45767045834Inf47204InfInfInfInf045791InfInf45795Inf4578845789Inf131604InfInfInf4577445770InfInf45932InfInf457740InfInf457764577445772InfInfInf45771InfInfInfInfInf471980InfInf4593245775Inf45780Inf45768Inf45768InfInfInfInf45774InfInf45764InfInfInfInfInfInfInfInfInfInf45771InfInfInf45770InfInfInf457684576845775Inf45839InfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInf
457679245816InfInf82251479854798545782457824578045896InfInfInfInfInfInf4583045782InfInf457974580845804InfInfInf45770045837Inf46741InfInfInfInf045794InfInf45798Inf4579145792InfInfInfInfInf4577745773InfInf45865InfInf457770InfInf457794577745775InfInfInf45774InfInfInfInfInf467350InfInf4586545778Inf45783Inf45771Inf45771InfInfInfInf45777InfInfInf45767InfInfInfInfInfInfInfInfInf45774InfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInf
457689345817InfInf80539477534775345783457834578245867InfInfInfInfInfInf4583245783InfInf457984580945805InfInfInf45771045838Inf46620InfInfInfInf045795InfInf45799Inf4579245793InfInfInfInfInf4577845774InfInf45854InfInf457780InfInf457804577845776InfInfInf45775InfInfInfInfInf466140InfInf4585445779InfInfInf45772Inf45772InfInfInfInf45778InfInfInfInf45768InfInfInfInfInfInfInfInf45775InfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInf
457709445832InfInf77288473514735145785457854578345828InfInfInfInfInfInf4583345785InfInf458004581145807InfInfInf45773045840Inf46422InfInfInfInf045797InfInf45801Inf4579445795InfInfInfInfInf4578045776InfInf45843InfInf457800InfInf457824578045778InfInfInf45777InfInfInfInfInf464160InfInf45843InfInfInfInf45774Inf45774InfInfInfInf45780InfInfInfInfInf45770InfInfInfInfInfInfInf45777InfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInf
1109515935415901791391391151151231441878InfInf377216325173125332644140151147536424632661130180215144308321517545481013715754771412891134135126547InfInf11912011630242161265494201200616371122120118274136518681171545576461661670513805611561112612124812654711462721142165434121215119547InfInfInfInfInf110InfInf2161651661201171191457547116237202155611411412112218570621612021721511714021621612653591145521788218413914014320412222211201251262161212222235364Inf3653167181175364126119119InfInf21653641711InfInf180548408022015363882205422216217165167120119120126InfInf37112212056923614152136Inf132245911212332981121122161216092161141609
248349624883InfInf42343254392543924849248492484724897InfInfInfInfInfInf2489724849InfInf248642487524871InfInfInf24837024904Inf25140InfInfInfInf024861InfInf24865Inf2485824859InfInfInfInfInf2484424840InfInf24910InfInf248440InfInf248462484424842InfInfInf24841InfInfInfInfInf251340InfInf2491024845InfInfInf24838Inf24838InfInfInfInf24846InfInfInfInfInfInfInf24834InfInfInfInfInf24841InfInfInf24840InfInfInf2483824838InfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInf249082513525136InfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfInfIn