Changeset 391 for branches

Show
Ignore:
Timestamp:
04/14/07 17:31:50 (2 years ago)
Author:
wren
Message:

Fixed SVGImport path parsing and added experimental quadratic bezier support

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/SVGImport/MWPointView2.m

    r379 r391  
    9696        MWSVGImport *svgImport; 
    9797        svgImport = [[MWSVGImport alloc] init]; 
    98         [svgImport parseXMLFile:@"/Users/wren/Desktop/LaserLine Dev/SVGImport/samples/butterfly.svg"]; 
     98        [svgImport parseXMLFile:@"/afs/acm.uiuc.edu/user/wren/Desktop/LaserLine Dev/SVGImport/samples/polyline1.svg"]; 
    9999         
    100100        NSMutableArray *arrayTemp = [svgImport array]; 
  • branches/SVGImport/MWSVGImport.m

    r382 r391  
    154154                NSLog(@"path: %@",pathData); 
    155155                NSScanner *theScanner = [NSScanner scannerWithString:pathData]; 
    156                 NSCharacterSet *numberSet = [NSCharacterSet decimalDigitCharacterSet]; 
     156                //NSCharacterSet *numberSet = [NSCharacterSet decimalDigitCharacterSet]; 
    157157                NSCharacterSet *letterSet = [NSCharacterSet letterCharacterSet]; 
    158                 NSCharacterSet *whiteSet = [NSCharacterSet whitespaceAndNewlineCharacterSet]; 
     158                //NSCharacterSet *whiteSet = [NSCharacterSet whitespaceAndNewlineCharacterSet]; 
    159159                NSCharacterSet *whiteOrNumberSet = [NSCharacterSet characterSetWithCharactersInString:@" -123456789.0"]; 
     160                NSCharacterSet *extendedNumberSet = [NSCharacterSet characterSetWithCharactersInString:@"-123456789.0"]; 
    160161                NSString *command; 
    161162                NSString *point; 
     
    163164                path = [NSBezierPath bezierPath]; 
    164165                float f1,f2,f3,f4,f5,f6; 
     166                float prevX,prevY; 
     167                float firstX,firstY; 
    165168                 
    166169                while ([theScanner isAtEnd] == NO) { 
     
    177180                        { 
    178181                                [theScanner scanFloat:&f1]; 
    179                                 [theScanner scanUpToCharactersFromSet:numberSet intoString:nil]; 
     182                                [theScanner scanUpToCharactersFromSet:extendedNumberSet intoString:nil]; 
    180183                                [theScanner scanFloat:&f2]; 
    181184                                NSLog(@"Move to: %f,%f",f1,f2); 
    182185                                [path moveToPoint:NSMakePoint(f1,f2)]; 
     186                                prevX = f1; 
     187                                prevY = f2; 
     188                                firstX = f1; 
     189                                firstY = f2; 
    183190                        } else if ( [command isEqualToString:@"L"] ) 
    184191                        { 
    185192                                [theScanner scanFloat:&f1]; 
    186                                 [theScanner scanUpToCharactersFromSet:numberSet intoString:nil]; 
     193                                [theScanner scanUpToCharactersFromSet:extendedNumberSet intoString:nil]; 
    187194                                [theScanner scanFloat:&f2]; 
    188195                                NSLog(@"Line to: %f,%f",f1,f2); 
    189196                                [path lineToPoint:NSMakePoint(f1,f2)]; 
     197                                prevX = f1; 
     198                                prevY = f2;  
    190199                        } else if ( [command isEqualToString:@"C"] ) 
    191200                        { 
    192201                                [theScanner scanFloat:&f1]; 
    193                                 [theScanner scanUpToCharactersFromSet:numberSet intoString:nil]; 
     202                                [theScanner scanUpToCharactersFromSet:extendedNumberSet intoString:nil]; 
    194203                                [theScanner scanFloat:&f2]; 
    195                                 [theScanner scanUpToCharactersFromSet:numberSet intoString:nil]; 
     204                                [theScanner scanUpToCharactersFromSet:extendedNumberSet intoString:nil]; 
    196205                                [theScanner scanFloat:&f3]; 
    197                                 [theScanner scanUpToCharactersFromSet:numberSet intoString:nil]; 
     206                                [theScanner scanUpToCharactersFromSet:extendedNumberSet intoString:nil]; 
    198207                                [theScanner scanFloat:&f4]; 
    199                                 [theScanner scanUpToCharactersFromSet:numberSet intoString:nil]; 
     208                                [theScanner scanUpToCharactersFromSet:extendedNumberSet intoString:nil]; 
    200209                                [theScanner scanFloat:&f5]; 
    201                                 [theScanner scanUpToCharactersFromSet:numberSet intoString:nil]; 
     210                                [theScanner scanUpToCharactersFromSet:extendedNumberSet intoString:nil]; 
    202211                                [theScanner scanFloat:&f6]; 
    203212                                NSLog(@"Curve to: %f,%f control1: %f,%f control2: %f,%f",f5,f6,f1,f2,f3,f4); 
     
    205214                                         controlPoint1:NSMakePoint(f1,f2) 
    206215                                         controlPoint2:NSMakePoint(f3,f4)]; 
     216                                prevX = f5; 
     217                                prevY = f6;  
     218                        } else if ( [command isEqualToString:@"Q"] ) 
     219                        { 
     220                                [theScanner scanFloat:&f1]; 
     221                                [theScanner scanUpToCharactersFromSet:extendedNumberSet intoString:nil]; 
     222                                [theScanner scanFloat:&f2]; 
     223                                [theScanner scanUpToCharactersFromSet:extendedNumberSet intoString:nil]; 
     224                                [theScanner scanFloat:&f3]; 
     225                                [theScanner scanUpToCharactersFromSet:extendedNumberSet intoString:nil]; 
     226                                [theScanner scanFloat:&f4]; 
     227                                NSLog(@"Quadratic curve to: %f,%f, control: %f,%f",f3,f4,f1,f2); 
     228                                 
     229                                [path curveToPoint:NSMakePoint(f3,f4) 
     230                                         controlPoint1:NSMakePoint((1./3.)*(prevX+2*f1),(1./3.)*(prevY+2*f2)) 
     231                                         controlPoint2:NSMakePoint((1./3.)*(2*f1+f3),(1./3.)*(2*f2+f4))]; 
     232                                prevX = f3; 
     233                                prevY = f4;  
    207234                        } else if ( [command isEqualToString:@"Z"] || [command isEqualToString:@"z"]  ) 
    208235                        { 
    209236                                NSLog(@"Close path"); 
    210237                                [path closePath]; 
     238                                prevX = firstX; 
     239                                prevX = firstY; 
    211240                        } else { 
    212241                                [theScanner scanUpToCharactersFromSet:letterSet intoString:&point]; 
     
    249278                [objects addObject:path]; 
    250279        } 
     280         
     281        if ( [elementName isEqualToString:@"polyline"] || [elementName isEqualToString:@"polygon"] ) 
     282        { 
     283                pathData = [NSString stringWithString:[attributeDict objectForKey:@"points"]]; 
     284                NSScanner *theScanner = [NSScanner scannerWithString:pathData]; 
     285                NSCharacterSet *extendedNumberSet = [NSCharacterSet characterSetWithCharactersInString:@"-123456789.0"]; 
     286                float f1,f2; 
     287                 
     288                NSBezierPath *path; 
     289                path = [NSBezierPath bezierPath]; 
     290                 
     291                if ( [elementName isEqualToString:@"polyline"] ) 
     292                { 
     293                        NSLog(@"polyline"); 
     294                } 
     295                if ( [elementName isEqualToString:@"polygon"] ) 
     296                { 
     297                        NSLog(@"polygon"); 
     298                } 
     299                 
     300                [theScanner scanFloat:&f1]; 
     301                [theScanner scanUpToCharactersFromSet:extendedNumberSet intoString:nil]; 
     302                [theScanner scanFloat:&f2]; 
     303 
     304                [path moveToPoint:NSMakePoint(f1,f2)]; 
     305                 
     306                NSLog(@"Point: %f,%f",f1,f2); 
     307                 
     308                while ([theScanner isAtEnd] == NO) { 
     309                        [theScanner scanFloat:&f1]; 
     310                        [theScanner scanUpToCharactersFromSet:extendedNumberSet intoString:nil]; 
     311                        [theScanner scanFloat:&f2]; 
     312                         
     313                        [path lineToPoint:NSMakePoint(f1,f2)]; 
     314                        NSLog(@"Point: %f,%f",f1,f2); 
     315                } 
     316                 
     317                if ( [elementName isEqualToString:@"polygon"] ) 
     318                { 
     319                        [path closePath]; 
     320                } 
     321                 
     322                [objects addObject:path]; 
     323        } 
    251324} 
    252325 
  • branches/SVGImport/SVGImport.xcodeproj/wren.mode1

    r382 r391  
    205205                                <string>get-info</string> 
    206206                                <string>toggle-editor</string> 
    207                                 <string>Quick Model</string> 
    208207                                <string>NSToolbarFlexibleSpaceItem</string> 
    209208                                <string>com.apple.pbx.toolbar.searchfield</string> 
     
    269268                                                        </array> 
    270269                                                        <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key> 
    271                                                         <string>{{0, 0}, {186, 760}}</string> 
     270                                                        <string>{{0, 0}, {186, 910}}</string> 
    272271                                                </dict> 
    273272                                                <key>PBXTopSmartGroupGIDs</key> 
     
    281280                                        <dict> 
    282281                                                <key>Frame</key> 
    283                                                 <string>{{0, 0}, {203, 778}}</string> 
     282                                                <string>{{0, 0}, {203, 928}}</string> 
    284283                                                <key>GroupTreeTableConfiguration</key> 
    285284                                                <array> 
     
    288287                                                </array> 
    289288                                                <key>RubberWindowFrame</key> 
    290                                                 <string>0 59 1440 819 0 0 1440 878 </string> 
     289                                                <string>330 56 1482 969 0 0 1680 1028 </string> 
    291290                                        </dict> 
    292291                                        <key>Module</key> 
     
    318317                                                                                <integer>0</integer> 
    319318                                                                                <key>bookmark</key> 
    320                                                                                 <string>A2D8B9740BCCBA060033608A</string> 
     319                                                                                <string>A2C27DB80BD18C7B00ADDE44</string> 
    321320                                                                                <key>history</key> 
    322321                                                                                <array> 
     
    340339                                                                                        <string>A2E7B2DD0BCC614A00E392CF</string> 
    341340                                                                                        <string>A2E7B2E70BCC618300E392CF</string> 
    342                                                                                         <string>A2D8B9710BCCBA060033608A</string> 
    343                                                                                         <string>A2D8B9720BCCBA060033608A</string> 
     341                                                                                        <string>A2C27DAB0BD18A4800ADDE44</string> 
     342                                                                                        <string>A2C27DB40BD18C0100ADDE44</string> 
    344343                                                                                </array> 
    345344                                                                                <key>prevStack</key> 
     
    366365                                                                                        <string>A291BF5B0BCC3A88009AA344</string> 
    367366                                                                                        <string>A291BF5C0BCC3A88009AA344</string> 
    368                                                                                         <string>A2D8B9730BCCBA060033608A</string> 
     367                                                                                        <string>A2C27D5F0BD17A2000ADDE44</string> 
     368                                                                                        <string>A2C27D6D0BD17C9B00ADDE44</string> 
     369                                                                                        <string>A2C27D760BD17D9500ADDE44</string> 
     370                                                                                        <string>A2C27D7C0BD17DD500ADDE44</string> 
     371                                                                                        <string>A2C27D8F0BD17E0B00ADDE44</string> 
     372                                                                                        <string>A2C27D900BD17E0B00ADDE44</string> 
     373                                                                                        <string>A2C27DA50BD17F2900ADDE44</string> 
     374                                                                                        <string>A2C27DAD0BD18A4800ADDE44</string> 
    369375                                                                                </array> 
    370376                                                                        </dict> 
     
    378384                                                        <dict> 
    379385                                                                <key>Frame</key> 
    380                                                                 <string>{{0, 0}, {1232, 541}}</string> 
     386                                                                <string>{{0, 0}, {1274, 691}}</string> 
    381387                                                                <key>RubberWindowFrame</key> 
    382                                                                 <string>0 59 1440 819 0 0 1440 878 </string> 
     388                                                                <string>330 56 1482 969 0 0 1680 1028 </string> 
    383389                                                        </dict> 
    384390                                                        <key>Module</key> 
    385391                                                        <string>PBXNavigatorGroup</string> 
    386392                                                        <key>Proportion</key> 
    387                                                         <string>541pt</string> 
     393                                                        <string>691pt</string> 
    388394                                                </dict> 
    389395                                                <dict> 
     
    398404                                                        <dict> 
    399405                                                                <key>Frame</key> 
    400                                                                 <string>{{0, 546}, {1232, 232}}</string> 
     406                                                                <string>{{0, 696}, {1274, 232}}</string> 
    401407                                                                <key>RubberWindowFrame</key> 
    402                                                                 <string>0 59 1440 819 0 0 1440 878 </string> 
     408                                                                <string>330 56 1482 969 0 0 1680 1028 </string> 
    403409                                                        </dict> 
    404410                                                        <key>Module</key> 
     
    409415                                        </array> 
    410416                                        <key>Proportion</key> 
    411                                         <string>1232pt</string> 
     417                                        <string>1274pt</string> 
    412418                                </dict> 
    413419                        </array> 
     
    424430                        <key>TableOfContents</key> 
    425431                        <array> 
    426                                 <string>A2D8B9660BCCB8810033608A</string> 
     432                                <string>A2C27D610BD17A2000ADDE44</string> 
    427433                                <string>1CE0B1FE06471DED0097A5F4</string> 
    428                                 <string>A2D8B9670BCCB8810033608A</string> 
     434                                <string>A2C27D620BD17A2000ADDE44</string> 
    429435                                <string>1CE0B20306471E060097A5F4</string> 
    430436                                <string>1CE0B20506471E060097A5F4</string> 
     
    571577        <key>WindowOrderList</key> 
    572578        <array> 
     579                <string>A2C27D870BD17DD500ADDE44</string> 
     580                <string>A2C27D880BD17DD500ADDE44</string> 
     581                <string>A2CE6A070BADB89F006E6F1A</string> 
     582                <string>1CD10A99069EF8BA00B06720</string> 
     583                <string>A2C27D840BD17DD500ADDE44</string> 
     584                <string>1C0AD2B3069F1EA900FABCE6</string> 
    573585                <string>A2CE69D20BADB4FD006E6F1A</string> 
    574                 <string>1C0AD2B3069F1EA900FABCE6</string> 
    575                 <string>/Users/wren/Desktop/LaserLine Dev/SVGImport/SVGImport.xcodeproj</string> 
     586                <string>/afs/acm.uiuc.edu/user/wren/Desktop/LaserLine Dev/SVGImport/SVGImport.xcodeproj</string> 
    576587        </array> 
    577588        <key>WindowString</key> 
    578         <string>0 59 1440 819 0 0 1440 878 </string> 
     589        <string>330 56 1482 969 0 0 1680 1028 </string> 
    579590        <key>WindowTools</key> 
    580591        <array> 
     
    606617                                                                <string>{{0, 0}, {797, 249}}</string> 
    607618                                                                <key>RubberWindowFrame</key> 
    608                                                                 <string>410 347 797 531 0 0 1440 878 </string> 
     619                                                                <string>563 497 797 531 0 0 1680 1028 </string> 
    609620                                                        </dict> 
    610621                                                        <key>Module</key> 
     
    630641                                                                <string>{{0, 254}, {797, 236}}</string> 
    631642                                                                <key>RubberWindowFrame</key> 
    632                                                                 <string>410 347 797 531 0 0 1440 878 </string> 
     643                                                                <string>563 497 797 531 0 0 1680 1028 </string> 
    633644                                                        </dict> 
    634645                                                        <key>Module</key> 
     
    653664                        <array> 
    654665                                <string>A2CE69D20BADB4FD006E6F1A</string> 
    655                                 <string>A2D8B96F0BCCB9EF0033608A</string> 
     666                                <string>A2C27D630BD17A2000ADDE44</string> 
    656667                                <string>1CD0528F0623707200166675</string> 
    657668                                <string>XCMainBuildResultsModuleGUID</string> 
     
    660671                        <string>xcode.toolbar.config.build</string> 
    661672                        <key>WindowString</key> 
    662                         <string>410 347 797 531 0 0 1440 878 </string> 
     673                        <string>563 497 797 531 0 0 1680 1028 </string> 
    663674                        <key>WindowToolGUID</key> 
    664675                        <string>A2CE69D20BADB4FD006E6F1A</string> 
     
    695706                                                                                <key>sizes</key> 
    696707                                                                                <array> 
    697                                                                                         <string>{{0, 0}, {472, 358}}</string> 
    698                                                                                         <string>{{472, 0}, {626, 358}}</string> 
     708                                                                                        <string>{{0, 0}, {469, 358}}</string> 
     709                                                                                        <string>{{469, 0}, {629, 358}}</string> 
    699710                                                                                </array> 
    700711                                                                        </dict> 
     
    736747                                                                <string>{{0, 0}, {1098, 681}}</string> 
    737748                                                                <key>RubberWindowFrame</key> 
    738                                                                 <string>270 117 1098 722 0 0 1440 878 </string> 
     749                                                                <string>463 229 1098 722 0 0 1680 1028 </string> 
    739750                                                        </dict> 
    740751                                                        <key>Module</key> 
     
    759770                        <array> 
    760771                                <string>1CD10A99069EF8BA00B06720</string> 
    761                                 <string>A2E7B2D10BCC613D00E392CF</string> 
     772                                <string>A2C27D7E0BD17DD500ADDE44</string> 
    762773                                <string>1C162984064C10D400B95A72</string> 
    763                                 <string>A2E7B2D20BCC613D00E392CF</string> 
    764                                 <string>A2E7B2D30BCC613D00E392CF</string> 
    765                                 <string>A2E7B2D40BCC613D00E392CF</string> 
    766                                 <string>A2E7B2D50BCC613D00E392CF</string> 
    767                                 <string>A2E7B2D60BCC613D00E392CF</string> 
    768                                 <string>A2E7B2D70BCC613D00E392CF</string> 
     774                                <string>A2C27D7F0BD17DD500ADDE44</string> 
     775                                <string>A2C27D800BD17DD500ADDE44</string> 
     776                                <string>A2C27D810BD17DD500ADDE44</string> 
     777                                <string>A2C27D820BD17DD500ADDE44</string> 
     778                                <string>A2C27D830BD17DD500ADDE44</string> 
     779                                <string>A2C27D840BD17DD500ADDE44</string> 
    769780                        </array> 
    770781                        <key>ToolbarConfiguration</key> 
    771782                        <string>xcode.toolbar.config.debug</string> 
    772783                        <key>WindowString</key> 
    773                         <string>270 117 1098 722 0 0 1440 878 </string> 
     784                        <string>463 229 1098 722 0 0 1680 1028 </string> 
    774785                        <key>WindowToolGUID</key> 
    775786                        <string>1CD10A99069EF8BA00B06720</string> 
     
    895906                                                                <string>{{0, 0}, {440, 358}}</string> 
    896907                                                                <key>RubberWindowFrame</key> 
    897                                                                 <string>78 404 440 400 0 0 1440 878 </string> 
     908                                                                <string>97 531 440 400 0 0 1680 1028 </string> 
    898909                                                        </dict> 
    899910                                                        <key>Module</key> 
     
    918929                        <array> 
    919930                                <string>A2CE6A070BADB89F006E6F1A</string> 
    920                                 <string>A2E7B2D80BCC613D00E392CF</string> 
     931                                <string>A2C27D850BD17DD500ADDE44</string> 
    921932                                <string>1C78EAAC065D492600B07095</string> 
    922933                        </array> 
    923934                        <key>WindowString</key> 
    924                         <string>78 404 440 400 0 0 1440 878 </string> 
     935                        <string>97 531 440 400 0 0 1680 1028 </string> 
    925936                        <key>WindowToolGUID</key> 
    926937                        <string>A2CE6A070BADB89F006E6F1A</string> 
     
    9901001                                                                <string>{{0, 0}, {1351, 490}}</string> 
    9911002                                                                <key>RubberWindowFrame</key> 
    992                                                                 <string>49 309 1351 531 0 0 1440 878 </string> 
     1003                                                                <string>181 439 1351 531 0 0 1680 1028 </string> 
    9931004                                                        </dict> 
    9941005                                                        <key>Module</key> 
     
    10131024                        <array> 
    10141025                                <string>1C0AD2B3069F1EA900FABCE6</string> 
    1015                                 <string>A2D8B9680BCCB8810033608A</string> 
     1026                                <string>A2C27D640BD17A2000ADDE44</string> 
    10161027                                <string>1CD0528B0623707200166675</string> 
    1017                                 <string>A2D8B9690BCCB8810033608A</string> 
     1028                                <string>A2C27D650BD17A2000ADDE44</string> 
    10181029                        </array> 
    10191030                        <key>ToolbarConfiguration</key> 
    10201031                        <string>xcode.toolbar.config.run</string> 
    10211032                        <key>WindowString</key> 
    1022                         <string>49 309 1351 531 0 0 1440 878 </string> 
     1033                        <string>181 439 1351 531 0 0 1680 1028 </string> 
    10231034                        <key>WindowToolGUID</key> 
    10241035                        <string>1C0AD2B3069F1EA900FABCE6</string> 
  • branches/SVGImport/SVGImport.xcodeproj/wren.pbxuser

    r382 r391  
    4343                                PBXFileTableDataSourceColumnWidthsKey = ( 
    4444                                        20, 
    45                                         993
     45                                        1000
    4646                                        20, 
    4747                                        48, 
     
    6060                                ); 
    6161                        }; 
    62                         PBXPerProjectTemplateStateSaveDate = 197965942
    63                         PBXWorkspaceStateSaveDate = 197965942
     62                        PBXPerProjectTemplateStateSaveDate = 198277520
     63                        PBXWorkspaceStateSaveDate = 198277520
    6464                }; 
    6565                perUserProjectItems = { 
    66                         A232656F0BAE36C500E09297 /* PBXTextBookmark */ = A232656F0BAE36C500E09297 /* PBXTextBookmark */; 
    67                         A23265700BAE36C500E09297 /* PBXTextBookmark */ = A23265700BAE36C500E09297 /* PBXTextBookmark */; 
    68                         A23265770BAE36C500E09297 /* PBXTextBookmark */ = A23265770BAE36C500E09297 /* PBXTextBookmark */; 
    69                         A23265890BAE371200E09297 /* PBXTextBookmark */ = A23265890BAE371200E09297 /* PBXTextBookmark */; 
    70                         A23266400BAE40A700E09297 /* PBXTextBookmark */ = A23266400BAE40A700E09297 /* PBXTextBookmark */; 
    71                         A23266410BAE40A700E09297 /* PBXTextBookmark */ = A23266410BAE40A700E09297 /* PBXTextBookmark */; 
    72                         A23CF5D60BB5D95C005FCF13 /* PBXTextBookmark */ = A23CF5D60BB5D95C005FCF13 /* PBXTextBookmark */; 
    73                         A24416A60BCB3C6D00C9C609 /* PBXTextBookmark */ = A24416A60BCB3C6D00C9C609 /* PBXTextBookmark */; 
    74                         A24416A70BCB3C6D00C9C609 /* PBXTextBookmark */ = A24416A70BCB3C6D00C9C609 /* PBXTextBookmark */; 
    75                         A24416AA0BCB3C6D00C9C609 /* PBXTextBookmark */ = A24416AA0BCB3C6D00C9C609 /* PBXTextBookmark */; 
    76                         A24416AC0BCB3C6D00C9C609 /* PBXTextBookmark */ = A24416AC0BCB3C6D00C9C609 /* PBXTextBookmark */; 
    77                         A24417020BCB3DE900C9C609 /* PBXTextBookmark */ = A24417020BCB3DE900C9C609 /* PBXTextBookmark */; 
    78                         A245CBB20BB6359400990C8F /* PBXTextBookmark */ = A245CBB20BB6359400990C8F /* PBXTextBookmark */; 
    79                         A245CBDC0BB6401A00990C8F /* PBXTextBookmark */ = A245CBDC0BB6401A00990C8F /* PBXTextBookmark */; 
    80                         A27DD6EA0BBF7A5E00C550C9 /* PBXTextBookmark */ = A27DD6EA0BBF7A5E00C550C9 /* PBXTextBookmark */; 
    81                         A291BE560BCC2327009AA344 /* PBXTextBookmark */ = A291BE560BCC2327009AA344 /* PBXTextBookmark */; 
    82                         A291BE570BCC2327009AA344 /* PBXTextBookmark */ = A291BE570BCC2327009AA344 /* PBXTextBookmark */; 
    83                         A291BF4E0BCC3A88009AA344 /* PBXTextBookmark */ = A291BF4E0BCC3A88009AA344 /* PBXTextBookmark */; 
    84                         A291BF4F0BCC3A88009AA344 /* PBXTextBookmark */ = A291BF4F0BCC3A88009AA344 /* PBXTextBookmark */; 
    85                         A291BF500BCC3A88009AA344 /* PBXTextBookmark */ = A291BF500BCC3A88009AA344 /* PBXTextBookmark */; 
    86                         A291BF510BCC3A88009AA344 /* PBXTextBookmark */ = A291BF510BCC3A88009AA344 /* PBXTextBookmark */; 
    87                         A291BF5B0BCC3A88009AA344 /* PBXTextBookmark */ = A291BF5B0BCC3A88009AA344 /* PBXTextBookmark */; 
    88                         A291BF5C0BCC3A88009AA344 /* PBXTextBookmark */ = A291BF5C0BCC3A88009AA344 /* PBXTextBookmark */; 
    89                         A291BFC00BCC412B009AA344 /* PBXTextBookmark */ = A291BFC00BCC412B009AA344 /* PBXTextBookmark */; 
    90                         A29C72350BB4D039005E04BC /* PBXTextBookmark */ = A29C72350BB4D039005E04BC /* PBXTextBookmark */; 
    91                         A29C72360BB4D039005E04BC /* PBXTextBookmark */ = A29C72360BB4D039005E04BC /* PBXTextBookmark */; 
    92                         A29C72490BB4D6E0005E04BC /* PBXTextBookmark */ = A29C72490BB4D6E0005E04BC /* PBXTextBookmark */; 
    93                         A29C724A0BB4D6E0005E04BC /* PBXTextBookmark */ = A29C724A0BB4D6E0005E04BC /* PBXTextBookmark */; 
    94                         A29C73FF0BB4EA3B005E04BC /* PBXTextBookmark */ = A29C73FF0BB4EA3B005E04BC /* PBXTextBookmark */; 
    95                         A29C740F0BB4EA3B005E04BC /* PBXTextBookmark */ = A29C740F0BB4EA3B005E04BC /* PBXTextBookmark */; 
    96                         A29C74150BB4EA3B005E04BC /* PBXTextBookmark */ = A29C74150BB4EA3B005E04BC /* PBXTextBookmark */; 
    97                         A29C741B0BB4EA3B005E04BC /* PBXTextBookmark */ = A29C741B0BB4EA3B005E04BC /* PBXTextBookmark */; 
    98                         A2AF4E360BCC5F41003E97F4 /* PBXTextBookmark */ = A2AF4E360BCC5F41003E97F4 /* PBXTextBookmark */; 
    99                         A2CE69E50BADB5EB006E6F1A /* PBXTextBookmark */ = A2CE69E50BADB5EB006E6F1A /* PBXTextBookmark */; 
    100                         A2CE69E60BADB5EB006E6F1A /* PBXTextBookmark */ = A2CE69E60BADB5EB006E6F1A /* PBXTextBookmark */; 
    101                         A2CEC4D60BAF184600AAEDAE /* PBXTextBookmark */ = A2CEC4D60BAF184600AAEDAE /* PBXTextBookmark */; 
    102                         A2CEC4D70BAF184600AAEDAE /* PBXTextBookmark */ = A2CEC4D70BAF184600AAEDAE /* PBXTextBookmark */; 
    103                         A2D8B9710BCCBA060033608A /* PBXTextBookmark */ = A2D8B9710BCCBA060033608A /* PBXTextBookmark */; 
    104                         A2D8B9720BCCBA060033608A /* PBXTextBookmark */ = A2D8B9720BCCBA060033608A /* PBXTextBookmark */; 
    105                         A2D8B9730BCCBA060033608A /* PBXTextBookmark */ = A2D8B9730BCCBA060033608A /* PBXTextBookmark */; 
    106                         A2D8B9740BCCBA060033608A /* PBXTextBookmark */ = A2D8B9740BCCBA060033608A /* PBXTextBookmark */; 
    107                         A2DFD4DF0BBAE92100D4DA6C /* PBXTextBookmark */ = A2DFD4DF0BBAE92100D4DA6C /* PBXTextBookmark */; 
    108                         A2E7B2DD0BCC614A00E392CF /* PBXTextBookmark */ = A2E7B2DD0BCC614A00E392CF /* PBXTextBookmark */; 
    109                         A2E7B2E70BCC618300E392CF /* PBXTextBookmark */ = A2E7B2E70BCC618300E392CF /* PBXTextBookmark */; 
     66                        A232656F0BAE36C500E09297 = A232656F0BAE36C500E09297 /* PBXTextBookmark */; 
     67                        A23265700BAE36C500E09297 = A23265700BAE36C500E09297 /* PBXTextBookmark */; 
     68                        A23265770BAE36C500E09297 = A23265770BAE36C500E09297 /* PBXTextBookmark */; 
     69                        A23265890BAE371200E09297 = A23265890BAE371200E09297 /* PBXTextBookmark */; 
     70                        A23266400BAE40A700E09297 = A23266400BAE40A700E09297 /* PBXTextBookmark */; 
     71                        A23266410BAE40A700E09297 = A23266410BAE40A700E09297 /* PBXTextBookmark */; 
     72                        A23CF5D60BB5D95C005FCF13 = A23CF5D60BB5D95C005FCF13 /* PBXTextBookmark */; 
     73                        A24416A60BCB3C6D00C9C609 = A24416A60BCB3C6D00C9C609 /* PBXTextBookmark */; 
     74                        A24416A70BCB3C6D00C9C609 = A24416A70BCB3C6D00C9C609 /* PBXTextBookmark */; 
     75                        A24416AA0BCB3C6D00C9C609 = A24416AA0BCB3C6D00C9C609 /* PBXTextBookmark */; 
     76                        A24416AC0BCB3C6D00C9C609 = A24416AC0BCB3C6D00C9C609 /* PBXTextBookmark */; 
     77                        A24417020BCB3DE900C9C609 = A24417020BCB3DE900C9C609 /* PBXTextBookmark */; 
     78                        A245CBB20BB6359400990C8F = A245CBB20BB6359400990C8F /* PBXTextBookmark */; 
     79                        A245CBDC0BB6401A00990C8F = A245CBDC0BB6401A00990C8F /* PBXTextBookmark */; 
     80                        A27DD6EA0BBF7A5E00C550C9 = A27DD6EA0BBF7A5E00C550C9 /* PBXTextBookmark */; 
     81                        A291BE560BCC2327009AA344 = A291BE560BCC2327009AA344 /* PBXTextBookmark */; 
     82                        A291BE570BCC2327009AA344 = A291BE570BCC2327009AA344 /* PBXTextBookmark */; 
     83                        A291BF4E0BCC3A88009AA344 = A291BF4E0BCC3A88009AA344 /* PBXTextBookmark */; 
     84                        A291BF4F0BCC3A88009AA344 = A291BF4F0BCC3A88009AA344 /* PBXTextBookmark */; 
     85                        A291BF500BCC3A88009AA344 = A291BF500BCC3A88009AA344 /* PBXTextBookmark */; 
     86                        A291BF510BCC3A88009AA344 = A291BF510BCC3A88009AA344 /* PBXTextBookmark */; 
     87                        A291BF5B0BCC3A88009AA344 = A291BF5B0BCC3A88009AA344 /* PBXTextBookmark */; 
     88                        A291BF5C0BCC3A88009AA344 = A291BF5C0BCC3A88009AA344 /* PBXTextBookmark */; 
     89                        A291BFC00BCC412B009AA344 = A291BFC00BCC412B009AA344 /* PBXTextBookmark */; 
     90                        A29C72350BB4D039005E04BC = A29C72350BB4D039005E04BC /* PBXTextBookmark */; 
     91                        A29C72360BB4D039005E04BC = A29C72360BB4D039005E04BC /* PBXTextBookmark */; 
     92                        A29C72490BB4D6E0005E04BC = A29C72490BB4D6E0005E04BC /* PBXTextBookmark */; 
     93                        A29C724A0BB4D6E0005E04BC = A29C724A0BB4D6E0005E04BC /* PBXTextBookmark */; 
     94                        A29C73FF0BB4EA3B005E04BC = A29C73FF0BB4EA3B005E04BC /* PBXTextBookmark */; 
     95                        A29C740F0BB4EA3B005E04BC = A29C740F0BB4EA3B005E04BC /* PBXTextBookmark */; 
     96                        A29C74150BB4EA3B005E04BC = A29C74150BB4EA3B005E04BC /* PBXTextBookmark */; 
     97                        A29C741B0BB4EA3B005E04BC = A29C741B0BB4EA3B005E04BC /* PBXTextBookmark */; 
     98                        A2AF4E360BCC5F41003E97F4 = A2AF4E360BCC5F41003E97F4 /* PBXTextBookmark */; 
     99                        A2C27D5D0BD17A2000ADDE44 /* PBXTextBookmark */ = A2C27D5D0BD17A2000ADDE44 /* PBXTextBookmark */; 
     100                        A2C27D5E0BD17A2000ADDE44 /* PBXTextBookmark */ = A2C27D5E0BD17A2000ADDE44 /* PBXTextBookmark */; 
     101                        A2C27D5F0BD17A2000ADDE44 /* PBXTextBookmark */ = A2C27D5F0BD17A2000ADDE44 /* PBXTextBookmark */; 
     102                        A2C27D600BD17A2000ADDE44 /* PBXTextBookmark */ = A2C27D600BD17A2000ADDE44 /* PBXTextBookmark */; 
     103                        A2C27D6B0BD17C9B00ADDE44 /* PBXTextBookmark */ = A2C27D6B0BD17C9B00ADDE44 /* PBXTextBookmark */; 
     104                        A2C27D6C0BD17C9B00ADDE44 /* PBXTextBookmark */ = A2C27D6C0BD17C9B00ADDE44 /* PBXTextBookmark */; 
     105                        A2C27D6D0BD17C9B00ADDE44 /* PBXTextBookmark */ = A2C27D6D0BD17C9B00ADDE44 /* PBXTextBookmark */; 
     106                        A2C27D6E0BD17C9B00ADDE44 /* PBXTextBookmark */ = A2C27D6E0BD17C9B00ADDE44 /* PBXTextBookmark */; 
     107                        A2C27D720BD17D6B00ADDE44 /* PBXTextBookmark */ = A2C27D720BD17D6B00ADDE44 /* PBXTextBookmark */; 
     108                        A2C27D740BD17D9500ADDE44 /* PBXTextBookmark */ = A2C27D740BD17D9500ADDE44 /* PBXTextBookmark */; 
     109                        A2C27D750BD17D9500ADDE44 /* PBXTextBookmark */ = A2C27D750BD17D9500ADDE44 /* PBXTextBookmark */; 
     110                        A2C27D760BD17D9500ADDE44 /* PBXTextBookmark */ = A2C27D760BD17D9500ADDE44 /* PBXTextBookmark */; 
     111                        A2C27D770BD17D9500ADDE44 /* PBXTextBookmark */ = A2C27D770BD17D9500ADDE44 /* PBXTextBookmark */; 
     112                        A2C27D7A0BD17DD500ADDE44 /* PBXTextBookmark */ = A2C27D7A0BD17DD500ADDE44 /* PBXTextBookmark */; 
     113                        A2C27D7B0BD17DD500ADDE44 /* PBXTextBookmark */ = A2C27D7B0BD17DD500ADDE44 /* PBXTextBookmark */; 
     114                        A2C27D7C0BD17DD500ADDE44 /* PBXTextBookmark */ = A2C27D7C0BD17DD500ADDE44 /* PBXTextBookmark */; 
     115                        A2C27D7D0BD17DD500ADDE44 /* PBXTextBookmark */ = A2C27D7D0BD17DD500ADDE44 /* PBXTextBookmark */; 
     116                        A2C27D8D0BD17E0B00ADDE44 /* PBXTextBookmark */ = A2C27D8D0BD17E0B00ADDE44 /* PBXTextBookmark */; 
     117                        A2C27D8E0BD17E0B00ADDE44 /* PBXTextBookmark */ = A2C27D8E0BD17E0B00ADDE44 /* PBXTextBookmark */; 
     118                        A2C27D8F0BD17E0B00ADDE44 /* PBXTextBookmark */ = A2C27D8F0BD17E0B00ADDE44 /* PBXTextBookmark */; 
     119                        A2C27D900BD17E0B00ADDE44 /* PBXTextBookmark */ = A2C27D900BD17E0B00ADDE44 /* PBXTextBookmark */; 
     120                        A2C27D910BD17E0B00ADDE44 /* PBXTextBookmark */ = A2C27D910BD17E0B00ADDE44 /* PBXTextBookmark */; 
     121                        A2C27D960BD17E3100ADDE44 /* PBXTextBookmark */ = A2C27D960BD17E3100ADDE44 /* PBXTextBookmark */; 
     122                        A2C27D9B0BD17E6900ADDE44 /* PBXTextBookmark */ = A2C27D9B0BD17E6900ADDE44 /* PBXTextBookmark */; 
     123                        A2C27D9E0BD17EDF00ADDE44 /* PBXTextBookmark */ = A2C27D9E0BD17EDF00ADDE44 /* PBXTextBookmark */; 
     124                        A2C27DA10BD17F0900ADDE44 /* PBXTextBookmark */ = A2C27DA10BD17F0900ADDE44 /* PBXTextBookmark */; 
     125                        A2C27DA30BD17F2900ADDE44 /* PBXTextBookmark */ = A2C27DA30BD17F2900ADDE44 /* PBXTextBookmark */; 
     126                        A2C27DA40BD17F2900ADDE44 /* PBXTextBookmark */ = A2C27DA40BD17F2900ADDE44 /* PBXTextBookmark */; 
     127                        A2C27DA50BD17F2900ADDE44 /* PBXTextBookmark */ = A2C27DA50BD17F2900ADDE44 /* PBXTextBookmark */; 
     128                        A2C27DA60BD17F2900ADDE44 /* PBXTextBookmark */ = A2C27DA60BD17F2900ADDE44 /* PBXTextBookmark */; 
     129                        A2C27DA80BD17F4900ADDE44 /* PBXTextBookmark */ = A2C27DA80BD17F4900ADDE44 /* PBXTextBookmark */; 
     130                        A2C27DAB0BD18A4800ADDE44 /* PBXTextBookmark */ = A2C27DAB0BD18A4800ADDE44 /* PBXTextBookmark */; 
     131                        A2C27DAC0BD18A4800ADDE44 /* PBXTextBookmark */ = A2C27DAC0BD18A4800ADDE44 /* PBXTextBookmark */; 
     132                        A2C27DAD0BD18A4800ADDE44 /* PBXTextBookmark */ = A2C27DAD0BD18A4800ADDE44 /* PBXTextBookmark */; 
     133                        A2C27DAE0BD18A4800ADDE44 /* PBXTextBookmark */ = A2C27DAE0BD18A4800ADDE44 /* PBXTextBookmark */; 
     134                        A2C27DB10BD18AED00ADDE44 /* PBXTextBookmark */ = A2C27DB10BD18AED00ADDE44 /* PBXTextBookmark */; 
     135                        A2C27DB40BD18C0100ADDE44 /* PBXTextBookmark */ = A2C27DB40BD18C0100ADDE44 /* PBXTextBookmark */; 
    &nbs