(* Content-type: application/mathematica *) (*** Wolfram Notebook File ***) (* http://www.wolfram.com/nb *) (* CreatedBy='Mathematica 7.0' *) (*CacheID: 234*) (* Internal cache information: NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 145, 7] NotebookDataLength[ 19654, 633] NotebookOptionsPosition[ 16442, 517] NotebookOutlinePosition[ 17170, 542] CellTagsIndexPosition[ 17127, 539] WindowFrame->Normal*) (* Beginning of Notebook Content *) Notebook[{ Cell[CellGroupData[{ Cell["RSA Encryption", "Title", CellChangeTimes->{{3.4851011219118013`*^9, 3.485101125481921*^9}}], Cell[CellGroupData[{ Cell["Key Generation", "Section", CellChangeTimes->{{3.485099210733176*^9, 3.485099213028309*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"LargePrime", "[", "k_", "]"}], ":=", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", "t", "}"}], ",", RowBox[{ RowBox[{"t", "=", RowBox[{ RowBox[{"RandomInteger", "[", RowBox[{"{", RowBox[{ RowBox[{"10", "^", RowBox[{"(", RowBox[{"k", "-", "1"}], ")"}]}], ",", RowBox[{ RowBox[{"10", "^", "k"}], "-", "1"}]}], "}"}], "]"}], "//", RowBox[{ RowBox[{"(", RowBox[{"#", "+", RowBox[{"(", RowBox[{"1", "-", RowBox[{"Mod", "[", RowBox[{"#", ",", "2"}], "]"}]}], ")"}]}], ")"}], "&"}]}]}], ";", RowBox[{"While", "[", RowBox[{ RowBox[{"Not", "[", RowBox[{"PrimeQ", "[", "t", "]"}], "]"}], ",", RowBox[{"t", "=", RowBox[{ RowBox[{"RandomInteger", "[", RowBox[{"{", RowBox[{ RowBox[{"10", "^", RowBox[{"(", RowBox[{"k", "-", "1"}], ")"}]}], ",", RowBox[{ RowBox[{"10", "^", "k"}], "-", "1"}]}], "}"}], "]"}], "//", RowBox[{ RowBox[{"(", RowBox[{"#", "+", RowBox[{"(", RowBox[{"1", "-", RowBox[{"Mod", "[", RowBox[{"#", ",", "2"}], "]"}]}], ")"}]}], ")"}], "&"}]}]}]}], "]"}], ";", "t"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.4850993055227003`*^9, 3.485099314088604*^9}, { 3.4850993556592607`*^9, 3.4850995111044607`*^9}, {3.485099543950831*^9, 3.485099618023156*^9}, {3.485099678774886*^9, 3.4850997334903717`*^9}, 3.485099823572394*^9}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"LargePrime", "[", "2", "]"}]], "Input", CellChangeTimes->{{3.485099842836999*^9, 3.485099847279111*^9}}], Cell[BoxData[ FormBox["97", TraditionalForm]], "Output", CellChangeTimes->{3.485099848332013*^9}] }, Open ]], Cell[CellGroupData[{ Cell["Modulus", "Subsection", CellChangeTimes->{{3.4850999201195498`*^9, 3.485099922943688*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"p", "=", RowBox[{"LargePrime", "[", "54", "]"}]}], ";", RowBox[{"q", "=", RowBox[{"LargePrime", "[", "54", "]"}]}], ";", RowBox[{"m", "=", RowBox[{"p", " ", "q"}]}]}]], "Input", CellChangeTimes->{{3.485099851320825*^9, 3.485099899607953*^9}, 3.485099989132771*^9, {3.485100113353717*^9, 3.48510013245963*^9}}], Cell[BoxData[ FormBox["32660451849363083141229535620656171853216794286445859165058907483861\ 0810565872383062051372697191659166909747", TraditionalForm]], "Output", CellChangeTimes->{ 3.485099900640036*^9, 3.48509998986694*^9, {3.4851001199047956`*^9, 3.485100133214135*^9}}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"N", "[", "m", "]"}]], "Input", CellChangeTimes->{{3.48510014244836*^9, 3.4851001522668343`*^9}}], Cell[BoxData[ FormBox["3.266045184936308`*^107", TraditionalForm]], "Output", CellChangeTimes->{3.485100153132477*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Key Generation", "Subsection", CellChangeTimes->{{3.485100466899578*^9, 3.485100470205697*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"k", "=", RowBox[{ RowBox[{"RandomInteger", "[", RowBox[{"{", RowBox[{ RowBox[{"10", "^", "105"}], ",", RowBox[{"10", "^", "107"}]}], "}"}], "]"}], "//", RowBox[{ RowBox[{"(", RowBox[{"#", "+", RowBox[{"(", RowBox[{"1", "-", RowBox[{"Mod", "[", RowBox[{"#", ",", "2"}], "]"}]}], ")"}]}], ")"}], "&"}]}]}], ";"}], "\n", RowBox[{ RowBox[{"ExtendedGCD", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}], ",", "k"}], "]"}], "//", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"#", "[", RowBox[{"[", "1", "]"}], "]"}], ">", "1"}], ",", "\"\\"", ",", RowBox[{"{", RowBox[{"k", ",", RowBox[{"u", "=", RowBox[{"#", "[", RowBox[{"[", RowBox[{"2", ",", "2"}], "]"}], "]"}]}]}], "}"}]}], "]"}], "&"}]}]}], "Input", CellChangeTimes->{{3.485100208193128*^9, 3.4851003053324757`*^9}, { 3.485100352053527*^9, 3.4851004082881804`*^9}}], Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ "48790490728746218562249312404395712218032571087609921497347960355362613500\ 170501535626057038918157669467853", ",", "2761699541676534177363490107275900041020485419304839319903307045910328287\ 7283901969018791028606925984422357"}], "}"}], TraditionalForm]], "Output", CellChangeTimes->{3.485100342229321*^9, 3.485100409865663*^9}] }, Open ]], Cell[TextData[{ "Publish the public key pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"m", ",", "k"}], ")"}], TraditionalForm]], FormatType->"TraditionalForm"], "." }], "Text", CellChangeTimes->{{3.485100436255802*^9, 3.48510045278224*^9}, { 3.4851012232053213`*^9, 3.485101228941207*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"{", RowBox[{"m", ",", "k"}], "}"}]], "Input", CellChangeTimes->{{3.485101157894915*^9, 3.485101161711204*^9}}], Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ "32660451849363083141229535620656171853216794286445859165058907483861081056\ 5872383062051372697191659166909747", ",", "4879049072874621856224931240439571221803257108760992149734796035536261350\ 0170501535626057038918157669467853"}], "}"}], TraditionalForm]], "Output", CellChangeTimes->{3.485101997992148*^9}] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Using the keys", "Section", CellChangeTimes->{{3.485100489137082*^9, 3.485100495504087*^9}}], Cell["\<\ If you want to sent a message to me, you would look up my public key.\ \>", "Text", CellChangeTimes->{{3.485101197750237*^9, 3.485101218371151*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"message", "=", "\"\\"", " "}]], "Input", CellChangeTimes->{{3.485098795725165*^9, 3.4850988217932653`*^9}, { 3.4850992406163588`*^9, 3.4850992703898163`*^9}, {3.485100035762842*^9, 3.4851000509433002`*^9}}], Cell[BoxData[ FormBox["\<\"Meet me at 8 outside Building 40. Bring the cash and where a \ red scarf around your neck.\"\>", TraditionalForm]], "Output", CellChangeTimes->{3.4850988254220963`*^9, 3.485099272140255*^9, 3.485100052988718*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"numbers", "=", RowBox[{"ToCharacterCode", "[", "message", "]"}]}]], "Input", CellChangeTimes->{{3.485099098576667*^9, 3.485099102430999*^9}}], Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ "77", ",", "101", ",", "101", ",", "116", ",", "32", ",", "109", ",", "101", ",", "32", ",", "97", ",", "116", ",", "32", ",", "56", ",", "32", ",", "111", ",", "117", ",", "116", ",", "115", ",", "105", ",", "100", ",", "101", ",", "32", ",", "66", ",", "117", ",", "105", ",", "108", ",", "100", ",", "105", ",", "110", ",", "103", ",", "32", ",", "52", ",", "48", ",", "46", ",", "32", ",", "32", ",", "66", ",", "114", ",", "105", ",", "110", ",", "103", ",", "32", ",", "116", ",", "104", ",", "101", ",", "32", ",", "99", ",", "97", ",", "115", ",", "104", ",", "32", ",", "97", ",", "110", ",", "100", ",", "32", ",", "119", ",", "104", ",", "101", ",", "114", ",", "101", ",", "32", ",", "97", ",", "32", ",", "114", ",", "101", ",", "100", ",", "32", ",", "115", ",", "99", ",", "97", ",", "114", ",", "102", ",", "32", ",", "97", ",", "114", ",", "111", ",", "117", ",", "110", ",", "100", ",", "32", ",", "121", ",", "111", ",", "117", ",", "114", ",", "32", ",", "110", ",", "101", ",", "99", ",", "107", ",", "46"}], "}"}], TraditionalForm]], "Output", CellChangeTimes->{3.485099103826679*^9, 3.485099275782959*^9, 3.485100060268752*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"blocks", "=", RowBox[{"Partition", "[", RowBox[{ RowBox[{"PadRight", "[", RowBox[{"numbers", ",", RowBox[{"50", RowBox[{"Ceiling", "[", RowBox[{ RowBox[{"Length", "[", "numbers", "]"}], "/", "50"}], "]"}]}]}], "]"}], ",", "50"}], "]"}]}]], "Input", CellChangeTimes->{{3.485098976891314*^9, 3.485099005442212*^9}, { 3.485099039366735*^9, 3.485099118864647*^9}, {3.485099154225*^9, 3.485099168221113*^9}, {3.485099281129284*^9, 3.485099285902793*^9}, { 3.485100064572562*^9, 3.4851000714589767`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ "77", ",", "101", ",", "101", ",", "116", ",", "32", ",", "109", ",", "101", ",", "32", ",", "97", ",", "116", ",", "32", ",", "56", ",", "32", ",", "111", ",", "117", ",", "116", ",", "115", ",", "105", ",", "100", ",", "101", ",", "32", ",", "66", ",", "117", ",", "105", ",", "108", ",", "100", ",", "105", ",", "110", ",", "103", ",", "32", ",", "52", ",", "48", ",", "46", ",", "32", ",", "32", ",", "66", ",", "114", ",", "105", ",", "110", ",", "103", ",", "32", ",", "116", ",", "104", ",", "101", ",", "32", ",", "99", ",", "97", ",", "115", ",", "104", ",", "32"}], "}"}], ",", RowBox[{"{", RowBox[{ "97", ",", "110", ",", "100", ",", "32", ",", "119", ",", "104", ",", "101", ",", "114", ",", "101", ",", "32", ",", "97", ",", "32", ",", "114", ",", "101", ",", "100", ",", "32", ",", "115", ",", "99", ",", "97", ",", "114", ",", "102", ",", "32", ",", "97", ",", "114", ",", "111", ",", "117", ",", "110", ",", "100", ",", "32", ",", "121", ",", "111", ",", "117", ",", "114", ",", "32", ",", "110", ",", "101", ",", "99", ",", "107", ",", "46", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]}], "}"}]], "Output", CellChangeTimes->{ 3.485098950401987*^9, 3.4850990062400007`*^9, 3.4850991268885517`*^9, { 3.48509915726297*^9, 3.485099170375267*^9}, 3.4850992865200253`*^9, 3.485100072561507*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"a", "=", RowBox[{ RowBox[{ RowBox[{"Fold", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"128", "#1"}], "+", "#2"}], "&"}], ",", "0", ",", "#"}], "]"}], "&"}], "/@", "blocks"}]}]], "Input", CellChangeTimes->{{3.485098833283124*^9, 3.485098840348248*^9}, { 3.4850989003758183`*^9, 3.485098945058221*^9}, {3.48509917392337*^9, 3.485099196110073*^9}}], Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ "13939325993193520041227615524877244084955495682990628151881867669118126742\ 63578117774164158197001843700768", ",", "1753549808972879190393697858163730635001276950928463234527627039396260476\ 476555384871595086161399192223744"}], "}"}], TraditionalForm]], "Output", CellChangeTimes->{ 3.485098841652907*^9, 3.485098932182661*^9, {3.485099180574691*^9, 3.485099199295326*^9}, 3.4850992905975122`*^9, 3.485100079172068*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"1.", " ", "a"}]], "Input", CellChangeTimes->{{3.485099226567927*^9, 3.485099229820044*^9}}], Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"1.393932599319352`*^105", ",", "1.753549808972879`*^105"}], "}"}], TraditionalForm]], "Output", CellChangeTimes->{3.485099230691935*^9, 3.4850992943170977`*^9, 3.485100081645363*^9}] }, Open ]], Cell[BoxData[""], "Input", CellChangeTimes->{{3.4850988880495234`*^9, 3.485098897752537*^9}}], Cell[CellGroupData[{ Cell["Send this", "Subsubsection", CellChangeTimes->{{3.485100555715871*^9, 3.485100557137438*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"b", "=", RowBox[{"Map", "[", RowBox[{ RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"#", ",", "k", ",", "m"}], "]"}], "&"}], ",", "a"}], "]"}]}]], "Input", CellChangeTimes->{{3.485100529495902*^9, 3.485100546091585*^9}, { 3.4851005987019863`*^9, 3.485100603254093*^9}}], Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ "11560929042411371323606609622164458385807184780116719636218835468231464700\ 7741120857851560453211951140753788", ",", "8134154068742649183766895937501005535066639678639428757865721889523129336\ 0829707459037993314469772869685395"}], "}"}], TraditionalForm]], "Output", CellChangeTimes->{3.485100547018092*^9, 3.485100604122178*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["At the receiving end:", "Subsubsection", CellChangeTimes->{{3.485100576939393*^9, 3.485100591411488*^9}}], Cell[TextData[{ "I get ", StyleBox["b", "Input"], " and do this to get the message back" }], "Text", CellChangeTimes->{{3.485101245157959*^9, 3.4851012648794317`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"c", "=", RowBox[{"Map", "[", RowBox[{ RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"#", ",", "u", ",", "m"}], "]"}], "&"}], ",", "b"}], "]"}]}]], "Input", CellChangeTimes->{{3.485100529495902*^9, 3.485100546091585*^9}, { 3.485100593720529*^9, 3.485100628622929*^9}}], Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ "13939325993193520041227615524877244084955495682990628151881867669118126742\ 63578117774164158197001843700768", ",", "1753549808972879190393697858163730635001276950928463234527627039396260476\ 476555384871595086161399192223744"}], "}"}], TraditionalForm]], "Output", CellChangeTimes->{{3.48510061129462*^9, 3.485100629462001*^9}}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"c", "\[Equal]", "a"}]], "Input", CellChangeTimes->{{3.485100630284155*^9, 3.4851006411675587`*^9}}], Cell[BoxData[ FormBox["True", TraditionalForm]], "Output", CellChangeTimes->{{3.485100633069401*^9, 3.485100642304734*^9}}] }, Open ]], Cell["\<\ \"Unpacking\" the large numbers and converting to charactors is easy.\ \>", "Text", CellChangeTimes->{{3.4851012821775084`*^9, 3.4851013069058943`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Mod", "[", RowBox[{ RowBox[{"c", "[", RowBox[{"[", "1", "]"}], "]"}], ",", "128"}], "]"}]], "Input", CellChangeTimes->{{3.485101309545417*^9, 3.485101327072077*^9}}], Cell[BoxData[ FormBox["32", TraditionalForm]], "Output", CellChangeTimes->{3.485101998148459*^9}] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Security", "Section", CellChangeTimes->{{3.485100660744122*^9, 3.485100662597981*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Timing", "[", RowBox[{"TimeConstrained", "[", RowBox[{ RowBox[{"FactorInteger", "[", "m", "]"}], ",", RowBox[{"10", " ", "60"}]}], "]"}], "]"}]], "Input", CellChangeTimes->{{3.485100666871476*^9, 3.485100673232811*^9}, { 3.4851007494549017`*^9, 3.4851007954934273`*^9}}], Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"553.061693`", ",", "$Aborted"}], "}"}], TraditionalForm]], "Output", CellChangeTimes->{3.485101397215033*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Timing", "[", RowBox[{"TimeConstrained", "[", RowBox[{ RowBox[{"EulerPhi", "[", "m", "]"}], ",", RowBox[{"10", " ", "60"}]}], "]"}], "]"}]], "Input", CellChangeTimes->{{3.485100666871476*^9, 3.485100673232811*^9}, { 3.4851007494549017`*^9, 3.485100813449328*^9}}], Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"547.084398`", ",", "$Aborted"}], "}"}], TraditionalForm]], "Output", CellChangeTimes->{3.4851019976799383`*^9}] }, Open ]] }, Open ]] }, Open ]] }, WindowSize->{1097, 753}, WindowMargins->{{237, Automatic}, {Automatic, 95}}, PrintingCopies->1, PrintingPageRange->{1, Automatic}, PrintingOptions->{"PaperOrientation"->"Portrait", "PrintCellBrackets"->False, "PrintMultipleHorizontalPages"->False, "PrintRegistrationMarks"->False, "PrintingMargins"->{{54., 54.}, {72., 21.599999999999998`}}}, ShowSelection->True, Magnification:>FEPrivate`If[ FEPrivate`Equal[FEPrivate`$VersionNumber, 6.], 1.5, 1.5 Inherited], FrontEndVersion->"7.0 for Mac OS X x86 (32-bit) (November 11, 2008)", StyleDefinitions->"Default.nb" ] (* End of Notebook Content *) (* Internal cache information *) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[CellGroupData[{ Cell[567, 22, 99, 1, 114, "Title"], Cell[CellGroupData[{ Cell[691, 27, 99, 1, 100, "Section"], Cell[793, 30, 1704, 49, 111, "Input"], Cell[CellGroupData[{ Cell[2522, 83, 129, 2, 40, "Input"], Cell[2654, 87, 99, 2, 40, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[2790, 94, 97, 1, 51, "Subsection"], Cell[CellGroupData[{ Cell[2912, 99, 367, 9, 40, "Input"], Cell[3282, 110, 283, 5, 64, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[3602, 120, 121, 2, 40, "Input"], Cell[3726, 124, 120, 2, 45, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[3895, 132, 102, 1, 51, "Subsection"], Cell[CellGroupData[{ Cell[4022, 137, 1153, 39, 64, "Input"], Cell[5178, 178, 392, 8, 110, "Output"] }, Open ]], Cell[5585, 189, 313, 10, 39, "Text"], Cell[CellGroupData[{ Cell[5923, 203, 138, 3, 40, "Input"], Cell[6064, 208, 371, 8, 110, "Output"] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[6496, 223, 99, 1, 100, "Section"], Cell[6598, 226, 159, 3, 39, "Text"], Cell[CellGroupData[{ Cell[6782, 233, 333, 6, 87, "Input"], Cell[7118, 241, 245, 4, 40, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[7400, 250, 169, 3, 40, "Input"], Cell[7572, 255, 1279, 20, 110, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[8888, 280, 586, 14, 40, "Input"], Cell[9477, 296, 1571, 28, 156, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[11085, 329, 415, 12, 40, "Input"], Cell[11503, 343, 489, 10, 110, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[12029, 358, 116, 2, 40, "Input"], Cell[12148, 362, 241, 6, 49, "Output"] }, Open ]], Cell[12404, 371, 94, 1, 40, "Input"], Cell[CellGroupData[{ Cell[12523, 376, 100, 1, 36, "Subsubsection"], Cell[CellGroupData[{ Cell[12648, 381, 319, 9, 40, "Input"], Cell[12970, 392, 393, 8, 110, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[13412, 406, 112, 1, 36, "Subsubsection"], Cell[13527, 409, 171, 5, 39, "Text"], Cell[CellGroupData[{ Cell[13723, 418, 317, 9, 40, "Input"], Cell[14043, 429, 391, 8, 110, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[14471, 442, 124, 2, 40, "Input"], Cell[14598, 446, 125, 2, 40, "Output"] }, Open ]], Cell[14738, 451, 163, 3, 39, "Text"], Cell[CellGroupData[{ Cell[14926, 458, 201, 5, 40, "Input"], Cell[15130, 465, 99, 2, 40, "Output"] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[15290, 474, 93, 1, 100, "Section"], Cell[CellGroupData[{ Cell[15408, 479, 313, 7, 40, "Input"], Cell[15724, 488, 165, 5, 40, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[15926, 498, 306, 7, 40, "Input"], Cell[16235, 507, 167, 5, 40, "Output"] }, Open ]] }, Open ]] }, Open ]] } ] *) (* End of internal cache information *)