/*thunderbolt & sung*/
/*lpc is the main patch you play with*/
/*lpc compiles to lpc.pd*/

/* use kfi for abstraction levels, build from pd code */
/* use for loops, while loops, if to build the main patch objects, connect only this level in front of edwards. gonna be so sexy */

string lpcanalysis; /*declare*/
int i;
int j;
int count;
int a;
int b;
int c;
int d;

/*lpcanalysis internal subpatch, doesnt open on load*/

canvas lpcan(533, 49, 647, 519){
  /* look scary? dw, this code is heavily based on pd compiled code because the authors are used to it and can navigate it quite easily*/
  object("inlet~", -6, 104);
  object("rzero~ 0.97", -6, 128);
  object("rpole~ 0.97", 25, 398);
  object("outlet~", 25, 447);
  kfi(X, "text -47 397 De-emphasis");
  kfi(X, "text -85 127 Pre-emphasis");
  object("outlet", 194, 447);
  object("inlet", 108, 104);

  kfi(X, "text 114 464 Residual");
  kfi(X, "text 193 464 LPC coeffs");
  kfi(X, "text 279 36 with 2x (50%) overlap");
  object("samplerate~", 394, 124);
  kfi(X, "floatatom 349 146 5 0 0 0 - - -");
  kfi(X, "obj 349 105 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1");
  kfi(X, "text 343 164 Read back actual SR");
  object("*~", 25, 426);
  object("lpc~ 12", 26, 166);
  object("outlet~", 115, 447);
  kfi(X, "text 279 24 Set block size to 512 points");
  kfi(X, "text 278 49 running at 0.5 of parent SR");
  kfi(X, "text 282 194 512/22050 = 23.2 ms windows");
  object("inlet~", 185, 105);
  object("lpreson~", 25, 337);
  object("*~", 3, 273);
  object("rzero~ 0.97", 185, 129);
  object("*~", 115, 426);
  object("rpole~ 0.97", 115, 398);
  object("*~ 20", 185, 153);
  kfi(X, "text -71 3 LPC Analysis sub-patch");

  kfi(N, "canvas 0 22 450 300 (subpatch) 0");
  kfi(X, "array \$0-hanning 1027 float 1");
  /*who likes arrays*/
  kfi(A, "0 9.41234e-06 0 9.41234e-06 3.7649e-05 8.4709e-05 0.00015059 0.000235291
0.000338807 0.000461135 0.000602271 0.000762208 0.000940942 0.00113846
0.00135477 0.00158985 0.00184369 0.00211629 0.00240763 0.00271771 0.00304651
0.00339402 0.00376023 0.00414512 0.00454867 0.00497089 0.00541174 0.00587121
0.00634928 0.00684594 0.00736117 0.00789494 0.00844724 0.00901805 0.00960734
0.0102151 0.0108413 0.0114859 0.0121489 0.0128303 0.01353 0.014248
0.0149843 0.0157389 0.0165117 0.0173027 0.0181119 0.0189393 0.0197847
0.0206482 0.0215298 0.0224294 0.0233469 0.0242824 0.0252359 0.0262072
0.0271963 0.0282032 0.0292279 0.0302703 0.0313304 0.0324082 0.0335035
0.0346165 0.0357469 0.0368948 0.0380602 0.0392429 0.040443 0.0416604
0.0428951 0.0441469 0.0454159 0.0467021 0.0480053 0.0493255 0.0506627
0.0520168 0.0533878 0.0547755 0.0561801 0.0576014 0.0590393 0.0604938
0.0619649 0.0634524 0.0649564 0.0664768 0.0680135 0.0695664 0.0711356
0.0727209 0.0743223 0.0759397 0.0775731 0.0792224 0.0808875 0.0825684
0.0842651 0.0859773 0.0877052 0.0894486 0.0912074 0.0929817 0.0947712
0.0965761 0.0983961 0.100231 0.102081 0.103947 0.105827 0.107722 0.109631
0.111556 0.113495 0.115448 0.117416 0.119399 0.121395 0.123406 0.125432
0.127471 0.129524 0.131591 0.133673 0.135768 0.137876 0.139999 0.142134
0.144284 0.146446 0.148622 0.150812 0.153014 0.155229 0.157458 0.159699
0.161953 0.16422 0.1665 0.168792 0.171096 0.173413 0.175743 0.178084
0.180437 0.182803 0.185181 0.18757 0.189971 0.192384 0.194808 0.197244
0.199691 0.20215 0.20462 0.207101 0.209593 0.212096 0.214609 0.217134
0.219669 0.222215 0.224771 0.227337 0.229914 0.232501 0.235098 0.237705
0.240322 0.242948 0.245585 0.24823 0.250886 0.253551 0.256225 0.258908
0.2616 0.264301 0.267011 0.26973 0.272458 0.275194 0.277939 0.280691
0.283453 0.286222 0.288999 0.291785 0.294578 0.297379 0.300187 0.303004
0.305827 0.308658 0.311496 0.314341 0.317193 0.320052 0.322918 0.32579
0.328669 0.331555 0.334446 0.337344 0.340248 0.343159 0.346075 0.348997
0.351924 0.354857 0.357796 0.36074 0.363689 0.366643 0.369602 0.372567
0.375536 0.378509 0.381488 0.38447 0.387457 0.390449 0.393444 0.396444
0.399447 0.402454 0.405465 0.408479 0.411497 0.414518 0.417543 0.42057
0.423601 0.426634 0.42967 0.432709 0.43575 0.438794 0.44184 0.444888
0.447939 0.450991 0.454045 0.457101 0.460158 0.463217 0.466277 0.469339
0.472402 0.475466 0.47853 0.481596 0.484662 0.487729 0.490796 0.493864
0.496931 0.499999 0.503067 0.506135 0.509203 0.51227 0.515337 0.518403
0.521468 0.524533 0.527597 0.53066 0.533721 0.536782 0.539841 0.542898
0.545954 0.549008 0.55206 0.55511 0.558159 0.561205 0.564248 0.56729
0.570328 0.573364 0.576398 0.579428 0.582456 0.58548 0.588501 0.591519
0.594534 0.597544 0.600552 0.603555 0.606554 0.60955 0.612541 0.615528
0.618511 0.621489 0.624463 0.627432 0.630396 0.633356 0.63631 0.639259
0.642203 0.645142 0.648075 0.651002 0.653924 0.65684 0.65975 0.662654
0.665552 0.668444 0.67133 0.674209 0.677081 0.679947 0.682806 0.685658
0.688503 0.691341 0.694172 0.696995 0.699811 0.70262 0.705421 0.708214
0.710999 0.713777 0.716546 0.719307 0.72206 0.724805 0.727541 0.730269
0.732987 0.735698 0.738399 0.741091 0.743774 0.746448 0.749113 0.751768
0.754414 0.757051 0.759677 0.762294 0.764901 0.767498 0.770085 0.772662
0.775228 0.777784 0.78033 0.782865 0.78539 0.787903 0.790406 0.792898
0.795379 0.797849 0.800308 0.802755 0.805191 0.807615 0.810028 0.812429
0.814818 0.817196 0.819561 0.821915 0.824256 0.826586 0.828903 0.831207
0.833499 0.835779 0.838046 0.8403 0.842541 0.84477 0.846985 0.849187
0.851377 0.853553 0.855715 0.857865 0.860001 0.862123 0.864232 0.866326
0.868408 0.870475 0.872528 0.874568 0.876593 0.878604 0.880601 0.882583
0.884551 0.886505 0.888444 0.890368 0.892278 0.894173 0.896053 0.897918
0.899768 0.901603 0.903423 0.905228 0.907018 0.908792 0.910551 0.912294
0.914022 0.915734 0.917431 0.919112 0.920777 0.922426 0.92406 0.925677
0.927278 0.928864 0.930433 0.931986 0.933523 0.935043 0.936547 0.938035
0.939506 0.94096 0.942398 0.943819 0.945224 0.946612 0.947983 0.949337
0.950674 0.951994 0.953297 0.954584 0.955853 0.957104 0.958339 0.959556
0.960757 0.961939 0.963105 0.964253 0.965383 0.966496 0.967591 0.968669
0.969729 0.970772 0.971796 0.972803 0.973792 0.974764 0.975717 0.976653
0.97757 0.97847 0.979351 0.980215 0.98106 0.981888 0.982697 0.983488
0.984261 0.985015 0.985752 0.98647 0.987169 0.987851 0.988514 0.989158
0.989785 0.990392 0.990982 0.991553 0.992105 0.992639 0.993154 0.99365
0.994129 0.994588 0.995029 0.995451 0.995855 0.99624 0.996606 0.996953
0.997282 0.997592 0.997884 0.998156 0.99841 0.998645 0.998861 0.999059
0.999238 0.999398 0.999539 0.999661 0.999765 0.999849 0.999915 0.999962
0.999991 1 0.999991 0.999962 0.999915 0.999849 0.999765 0.999661 0.999539
0.999398 0.999238 0.999059 0.998862 0.998645 0.99841 0.998156 0.997884
0.997593 0.997282 0.996954 0.996606 0.99624 0.995855 0.995452 0.995029
0.994588 0.994129 0.993651 0.993154 0.992639 0.992105 0.991553 0.990982
0.990393 0.989785 0.989159 0.988514 0.987851 0.98717 0.98647 0.985752
0.985016 0.984261 0.983489 0.982698 0.981888 0.981061 0.980216 0.979352
0.978471 0.977571 0.976653 0.975718 0.974765 0.973793 0.972804 0.971797
0.970773 0.96973 0.96867 0.967592 0.966497 0.965384 0.964254 0.963106
0.96194 0.960758 0.959558 0.95834 0.957105 0.955854 0.954585 0.953299
0.951995 0.950675 0.949338 0.947984 0.946613 0.945225 0.943821 0.942399
0.940961 0.939507 0.938036 0.936548 0.935044 0.933524 0.931987 0.930434
0.928865 0.92728 0.925678 0.924061 0.922428 0.920778 0.919113 0.917432
0.915736 0.914023 0.912296 0.910552 0.908793 0.907019 0.90523 0.903425
0.901605 0.89977 0.897919 0.896054 0.894174 0.892279 0.89037 0.888445
0.886506 0.884553 0.882585 0.880602 0.878605 0.876594 0.874569 0.87253
0.870477 0.868409 0.866328 0.864233 0.862125 0.860002 0.857867 0.855717
0.853555 0.851379 0.849189 0.846987 0.844772 0.842543 0.840302 0.838048
0.835781 0.833501 0.831209 0.828905 0.826588 0.824259 0.821917 0.819564
0.817198 0.81482 0.812431 0.81003 0.807617 0.805193 0.802757 0.80031
0.797851 0.795381 0.7929 0.790408 0.787906 0.785392 0.782867 0.780332
0.777787 0.77523 0.772664 0.770087 0.7675 0.764903 0.762296 0.759679
0.757053 0.754417 0.751771 0.749115 0.746451 0.743777 0.741093 0.738401
0.7357 0.73299 0.730271 0.727543 0.724807 0.722063 0.71931 0.716549
0.713779 0.711002 0.708216 0.705423 0.702622 0.699814 0.696998 0.694174
0.691343 0.688505 0.68566 0.682808 0.679949 0.677083 0.674211 0.671332
0.668447 0.665555 0.662657 0.659753 0.656843 0.653927 0.651005 0.648077
0.645144 0.642206 0.639262 0.636312 0.633358 0.630399 0.627435 0.624466
0.621492 0.618514 0.615531 0.612544 0.609552 0.606557 0.603558 0.600554
0.597547 0.594536 0.591522 0.588504 0.585483 0.582458 0.579431 0.576401
0.573367 0.570331 0.567292 0.564251 0.561207 0.558161 0.555113 0.552063
0.549011 0.545956 0.542901 0.539843 0.536784 0.533724 0.530662 0.5276
0.524536 0.521471 0.518406 0.515339 0.512273 0.509205 0.506138 0.50307
0.500002 0.496934 0.493866 0.490799 0.487731 0.484665 0.481598 0.478533
0.475468 0.472404 0.469342 0.46628 0.46322 0.460161 0.457103 0.454048
0.450993 0.447941 0.444891 0.441843 0.438797 0.435753 0.432712 0.429673
0.426637 0.423603 0.420573 0.417545 0.414521 0.4115 0.408482 0.405468
0.402457 0.39945 0.396446 0.393447 0.390451 0.38746 0.384473 0.38149
0.378512 0.375538 0.372569 0.369605 0.366646 0.363691 0.360742 0.357798
0.35486 0.351927 0.348999 0.346077 0.343161 0.340251 0.337347 0.334449
0.331557 0.328672 0.325793 0.32292 0.320054 0.317196 0.314343 0.311498
0.30866 0.305829 0.303006 0.30019 0.297381 0.29458 0.291787 0.289002
0.286224 0.283455 0.280694 0.277941 0.275196 0.27246 0.269733 0.267014
0.264304 0.261602 0.25891 0.256227 0.253553 0.250888 0.248233 0.245587
0.242951 0.240324 0.237707 0.2351 0.232503 0.229916 0.227339 0.224773
0.222217 0.219671 0.217136 0.214611 0.212098 0.209595 0.207103 0.204622
0.202152 0.199694 0.197246 0.19481 0.192386 0.189973 0.187572 0.185183
0.182805 0.18044 0.178086 0.175745 0.173415 0.171098 0.168794 0.166502
0.164222 0.161955 0.159701 0.15746 0.155231 0.153016 0.150814 0.148624
0.146448 0.144286 0.142136 0.14 0.137878 0.135769 0.133674 0.131593
0.129526 0.127473 0.125433 0.123408 0.121397 0.1194 0.117418 0.11545
0.113496 0.111557 0.109633 0.107723 0.105828 0.103948 0.102083 0.100233
0.0983977 0.0965776 0.0947728 0.0929832 0.091209 0.0894501 0.0877067
0.0859788 0.0842665 0.0825699 0.080889 0.0792238 0.0775745 0.0759411
0.0743237 0.0727223 0.0711369 0.0695678 0.0680148 0.0664781 0.0649577
0.0634537 0.0619661 0.0604951 0.0590405 0.0576026 0.0561813 0.0547768
0.053389 0.052018 0.0506638 0.0493266 0.0480064 0.0467032 0.045417
0.044148 0.0428961 0.0416615 0.0404441 0.0392439 0.0380612 0.0368958
0.0357479 0.0346174 0.0335045 0.0324091 0.0313314 0.0302712 0.0292288
0.0282041 0.0271972 0.026208 0.0252367 0.0242833 0.0233477 0.0224302
0.0215306 0.020649 0.0197854 0.01894 0.0181126 0.0173034 0.0165124
0.0157396 0.014985 0.0142487 0.0135306 0.0128309 0.0121495 0.0114865
0.0108418 0.0102156 0.00960786 0.00901855 0.00844773 0.00789541 0.00736162
0.00684638 0.0063497");

  kfi(A, "1000 0.00587161 0.00541213 0.00497126 0.00454903 0.00414546 0.00376055
0.00339433 0.0030468 0.00271799 0.00240789 0.00211653 0.00184392 0.00159006
0.00135496 0.00113864 0.000941105 0.000762355 0.000602401 0.000461249
0.000338905 0.000235372 0.000150656 8.47578e-05 3.76816e-05 9.42863e-06
7.04153e-12 9.39607e-06");

  kfi(X, "coords 0 1 1026 0 100 70 1");
  kfi(X, "restore 284 248 graph");

  /* comment the pd code */
  kfi(X, "text 281 349 Tapered window for overlap-add");
  kfi(X, "text -48 85 Signal to be modeled");
  kfi(X, "text 94 85 Model order");
  kfi(X, "text 177 86 Excitation");
  kfi(X, "text -65 427 Tapered window");
  kfi(X, "text -64 160 Analyze to LPC");
  kfi(X, "text -81 212 Find envelope");
  kfi(X, "text -81 224 of residual");
  kfi(X, "text -7 182 residual");
  kfi(X, "text 54 183 LPC coeffs");
  kfi(X, "text -80 256 Scale excitation");
  kfi(X, "text -80 267 by envelope");
  kfi(X, "text -66 344 to excitation");
  kfi(X, "text -53 171 filters");
  kfi(X, "text -81 333 Apply LPC filters");
  kfi(X, "text 154 308 Normalize residual");
  kfi(X, "text 163 336 .. and scale down");
  kfi(X, "text 277 69 Block length must match");
  kfi(X, "text 277 80 length of hanning array.");
  kfi(X, "text -72 16 We run this in a sub-patch to take advantage of block~ which allows us to vary the frame length \, overlap \, and sample rate.");
  kfi(X, "text 187 170 Scale-up");
  kfi(X, "text 183 181 excitation");
  kfi(X, "text 281 206 2x overlap -> 11.6 ms frames");
  kfi(X, "text 19 464 Synthesis");

  /* ext subpatch myenv */
  /* could have used kfi to make this a subsubpatch of lpc.pd*/
  /*object("myenv", 3, 219);*/

  kfi(N, "canvas 320 356 450 300 myenv 0");
  kfi(X, "obj 94 129 pack~");
  kfi(X, "obj 94 151 sum");
  kfi(X, "obj 94 108 *~");
  kfi(X, "obj 94 84 +~ 0");
  kfi(X, "obj 94 208 sqrt");
  kfi(X, "obj 95 229 sig~");
  kfi(X, "obj 92 49 inlet~");
  kfi(X, "obj 95 270 outlet~");
  kfi(X, "obj 94 178 / 512");
  kfi(X, "obj 145 86 iem_blocksize~");
  kfi(X, "obj 178 268 outlet");
  kfi(X, "text 230 269 frame-rate gain");
  kfi(X, "connect 0 0 1 0");
  kfi(X, "connect 1 0 8 0");
  kfi(X, "connect 2 0 0 0");
  kfi(X, "connect 3 0 2 0");
  kfi(X, "connect 3 0 2 1");
  kfi(X, "connect 4 0 5 0");
  kfi(X, "connect 4 0 10 0");
  kfi(X, "connect 5 0 7 0");
  kfi(X, "connect 6 0 3 0");
  kfi(X, "connect 6 0 9 0");
  kfi(X, "connect 8 0 4 0");
  kfi(X, "connect 9 0 8 1");
  kfi(X, "restore 3 219 pd myenv");

  object("list", 67, 278);
  object("t l b", 65, 254);
  object("block~ 1024 2 0.5", 284, 6);
  kfi(X, "text 35 305 one frame");
  kfi(X, "text 34 316 to match gain");
  object("outlet", 275, 447);
  kfi(X, "text 274 463 Gain");
  kfi(X, "msg 284 321 \; \$0-hanning cosinesum 1024 0.5 -0.5");
  object("tabreceive~ \$0-hanning", 284, 365);
  object("/~ 1", 115, 313);
  object("pack~", 115, 255);
  object("unpack~", 115, 275);
  kfi(X, "text 165 251 Delay residual");
  kfi(X, "text 165 263 one block");
  kfi(X, "text 36 296 Delay coeffs");
  kfi(X, "text 164 275 to match gain");
  kfi(X, "text 154 319 by gain (envelope)");
  kfi(X, "text -69 60 thunderbolt & sung");
  object("*~ 0.01", 115, 337);

  /*yes...even connections*/
  kfi(X, "connect 0 0 1 0");
  kfi(X, "connect 1 0 16 0");
  kfi(X, "connect 2 0 15 0");
  kfi(X, "connect 7 0 16 1");
  kfi(X, "connect 11 0 12 0");
  kfi(X, "connect 13 0 11 0");
  kfi(X, "connect 15 0 3 0");
  kfi(X, "connect 16 0 54 0");
  kfi(X, "connect 16 0 65 0");
  kfi(X, "connect 16 1 56 0");
  kfi(X, "connect 21 0 24 0");
  kfi(X, "connect 22 0 2 0");
  kfi(X, "connect 23 0 22 0");
  kfi(X, "connect 24 0 27 0");
  kfi(X, "connect 25 0 17 0");
  kfi(X, "connect 26 0 25 0");
  kfi(X, "connect 27 0 23 1");
  kfi(X, "connect 54 0 23 0");
  kfi(X, "connect 54 1 60 0");
  kfi(X, "connect 54 1 64 1");
  kfi(X, "connect 55 0 22 0");
  kfi(X, "connect 55 0 6 0");
  kfi(X, "connect 56 0 55 1");
  kfi(X, "connect 56 1 55 0");
  kfi(X, "connect 63 0 15 1");
  kfi(X, "connect 63 0 25 1");
  kfi(X, "connect 64 0 73 0");
  kfi(X, "connect 65 0 66 0");
  kfi(X, "connect 66 0 64 0");
  kfi(X, "connect 73 0 26 0");

}

/* main canvas */

canvas main(13, 108, 496, 416, 10) {
  /*declare any necessary variables*/
  lpcanalysis = "lpcanalysis";

  /* voice graph */
  kfi(N, "canvas 0 22 450 300 (subpatch) 0");
  kfi(X, "array voice 153259 float 0");
  kfi(X, "coords 0 1 153258 -1 100 70 1");
  kfi(X, "restore 334 94 graph");

  /* excitation graph */
  kfi(N, "canvas 0 22 450 300 (subpatch) 0");
  kfi(X, "array excitation 194810 float 0");
  kfi(X, "coords 0 1 194809 -1 100 70 1");
  kfi(X, "restore 334 183 graph");

  /*kfi(X, "TEST");*/
  i = 0;
  j = 0;
  while (i < 1) {
    /* variables don't work with kfi */
    kfi(X, "obj -5 71 bng 15 250 50 0 empty empty empty -38 -6 0 8 -262144 -1 -1");
    kfi(X, "obj 154 71 bng 15 250 50 0 empty empty empty -38 -6 0 8 -262144 -1 -1");
    kfi(X, "obj 41 133 bng 15 250 50 0 empty empty play 0 -6 0 8 -262144 -1 -1");
    kfi(X, "floatatom 219 163 5 1 100 2 - - -");
    kfi(X, "obj 122 133 tgl 15 0 empty empty loop 0 -6 0 8 -262144 -1 -1 0 1");
    object("loadbang", 219, 120);
    j = j + 9;
    object("output~", j, 304);
    kfi(X, "text -37 362 thunderbolt & sung");
    object("loadsoundfile voice", -5, 95);
    lpcan(lpcanalysis, 9, 255);
    object("playloop voice", -4, 163);
    kfi(X, "text 255 169 order");
    /* can even do objects with kfi */
    kfi(X, "obj 90 163 playloop excitation");
    object("loadsoundfile excitation", 153, 94);
    object("noise~", 120, 184);
    kfi(X, "text -39 8 LPC analysis-synthesis");
    kfi(X, "text 151 38 Click here to select sound");
    kfi(X, "text 151 51 for excitation (or use noise)");
    kfi(X, "text -39 38 Click here to select sound");
    kfi(X, "text -40 50 that LPC filter will model");
    kfi(X, "text 255 159 Filter");
    kfi(X, "msg 219 141 24");
    object("audiosel~", 90, 229);
    object("*~ 0.1", 120, 205);
    kfi(X, "text -16 271 synth");
    kfi(X, "text 17 271 resid");
    kfi(X, "text 51 271 coeffs");
    kfi(X, "text -37 379 there's a lot going on here");
    kfi(X, "text -37 391 like lots and lots!!!!!!!!!");
    kfi(X, "text 93 271 gain");
    i = i + 2;
    /*object("TEST", i, i);*/
  }

  /* handle some connections via rocky2 ... */

  /*count = 2;
  finishes the loop before exiting even if the cond isnt met
  while (count < 5) {
    a = 14;
    b = 0;
    c = 24;
    d = 0;
    connectS(a,b,c,d);
    count = count + 1;
    a = 16;
    b = 0;
    c = 25;
    d = 0;
    connectS(a,b,c,d);
    count = count + 1;
    a = 23;
    b = 0;
    c = 5;
    d = 0;
    connectS(a,b,c,d);
    count = count + 1;
    a = 24;
    b = 0;
    c = 11;
    d = 2;
    connectS(a,b,c,d);
    count = count + 1;
    a = 25;
    b = 0;
    c = 24;
    d = 1;
    connectS(a,b,c,d);
    count = count + 1;
  }
  */
  /*do the rest manually.*/

  kfi(X, "connect 2 0 10 0");
  kfi(X, "connect 3 0 15 0");
  kfi(X, "connect 4 0 12 0");
  kfi(X, "connect 4 0 14 0");
  kfi(X, "connect 5 0 11 1");

  kfi(X, "connect 6 0 12 1");
  kfi(X, "connect 6 0 14 1");
  kfi(X, "connect 7 0 23 0");
  kfi(X, "connect 11 0 8 0");
  kfi(X, "connect 11 0 8 1");
  kfi(X, "connect 12 0 11 0");

  kfi(X, "connect 14 0 24 0");
  kfi(X, "connect 16 0 25 0");
  kfi(X, "connect 23 0 5 0");
  kfi(X, "connect 24 0 11 2");
  kfi(X, "connect 25 0 24 1");
}