347 {
348 if (lhs._length <= 1)
349 {
350 Multiply(ref rhs, lhs.ToUInt32(), out result);
351 return;
352 }
353 if (rhs._length <= 1)
354 {
355 Multiply(ref lhs, rhs.ToUInt32(), out result);
356 return;
357 }
363 {
364 reference = ref rhs;
366 reference2 = ref lhs;
368 }
370 result.Clear((uint)num);
371 int num2 = 0;
372 int num3 = 0;
374 {
375 if (reference2._blocks[num2] != 0)
376 {
377 int num4 = 0;
378 int num5 = num3;
379 ulong num6 = 0uL;
380 do
381 {
382 ulong num7 = (ulong)(result._blocks[num5] + (long)reference2._blocks[num2] * (long)reference._blocks[num4]) + num6;
383 num6 = num7 >> 32;
384 result._blocks[num5] = (uint)num7;
385 num5++;
386 num4++;
387 }
389 result._blocks[num5] = (uint)num6;
390 }
391 num2++;
392 num3++;
393 }
394 if (num > 0 && result._blocks[num - 1] == 0)
395 {
396 result._length--;
397 }
398 }