Merge remote-tracking branch 'rbultje/master'

* rbultje/master:
  Full-pixel MC functions.
  VP9 MC (ssse3) optimizations.
  Native VP9 decoder.

Merged-by: Michael Niedermayer <michaelni@gmx.at>
pull/37/merge
Michael Niedermayer 11 years ago
commit 4c292d5c34
  1. 1
      Changelog
  2. 1
      configure
  3. 4
      doc/general.texi
  4. 1
      libavcodec/Makefile
  5. 1
      libavcodec/allcodecs.c
  6. 3576
      libavcodec/vp9.c
  7. 72
      libavcodec/vp9.h
  8. 2153
      libavcodec/vp9data.h
  9. 2049
      libavcodec/vp9dsp.c
  10. 117
      libavcodec/vp9dsp.h
  11. 2
      libavcodec/x86/Makefile
  12. 278
      libavcodec/x86/vp9dsp.asm
  13. 214
      libavcodec/x86/vp9dsp_init.c
  14. 2
      libavutil/x86/x86inc.asm
  15. 30
      tests/fate/vpx.mak
  16. 3
      tests/ref/fate/vp9-00-quantizer-00
  17. 3
      tests/ref/fate/vp9-00-quantizer-01
  18. 3
      tests/ref/fate/vp9-00-quantizer-02
  19. 3
      tests/ref/fate/vp9-00-quantizer-03
  20. 3
      tests/ref/fate/vp9-00-quantizer-04
  21. 3
      tests/ref/fate/vp9-00-quantizer-05
  22. 3
      tests/ref/fate/vp9-00-quantizer-06
  23. 3
      tests/ref/fate/vp9-00-quantizer-07
  24. 3
      tests/ref/fate/vp9-00-quantizer-08
  25. 3
      tests/ref/fate/vp9-00-quantizer-09
  26. 3
      tests/ref/fate/vp9-00-quantizer-10
  27. 3
      tests/ref/fate/vp9-00-quantizer-11
  28. 3
      tests/ref/fate/vp9-00-quantizer-12
  29. 3
      tests/ref/fate/vp9-00-quantizer-13
  30. 3
      tests/ref/fate/vp9-00-quantizer-14
  31. 3
      tests/ref/fate/vp9-00-quantizer-15
  32. 3
      tests/ref/fate/vp9-00-quantizer-16
  33. 3
      tests/ref/fate/vp9-00-quantizer-17
  34. 3
      tests/ref/fate/vp9-00-quantizer-18
  35. 3
      tests/ref/fate/vp9-00-quantizer-19
  36. 3
      tests/ref/fate/vp9-00-quantizer-20
  37. 3
      tests/ref/fate/vp9-00-quantizer-21
  38. 3
      tests/ref/fate/vp9-00-quantizer-22
  39. 3
      tests/ref/fate/vp9-00-quantizer-23
  40. 3
      tests/ref/fate/vp9-00-quantizer-24
  41. 3
      tests/ref/fate/vp9-00-quantizer-25
  42. 3
      tests/ref/fate/vp9-00-quantizer-26
  43. 3
      tests/ref/fate/vp9-00-quantizer-27
  44. 3
      tests/ref/fate/vp9-00-quantizer-28
  45. 3
      tests/ref/fate/vp9-00-quantizer-29
  46. 3
      tests/ref/fate/vp9-00-quantizer-30
  47. 3
      tests/ref/fate/vp9-00-quantizer-31
  48. 3
      tests/ref/fate/vp9-00-quantizer-32
  49. 3
      tests/ref/fate/vp9-00-quantizer-33
  50. 3
      tests/ref/fate/vp9-00-quantizer-34
  51. 3
      tests/ref/fate/vp9-00-quantizer-35
  52. 3
      tests/ref/fate/vp9-00-quantizer-36
  53. 3
      tests/ref/fate/vp9-00-quantizer-37
  54. 3
      tests/ref/fate/vp9-00-quantizer-38
  55. 3
      tests/ref/fate/vp9-00-quantizer-39
  56. 3
      tests/ref/fate/vp9-00-quantizer-40
  57. 3
      tests/ref/fate/vp9-00-quantizer-41
  58. 3
      tests/ref/fate/vp9-00-quantizer-42
  59. 3
      tests/ref/fate/vp9-00-quantizer-43
  60. 3
      tests/ref/fate/vp9-00-quantizer-44
  61. 3
      tests/ref/fate/vp9-00-quantizer-45
  62. 3
      tests/ref/fate/vp9-00-quantizer-46
  63. 3
      tests/ref/fate/vp9-00-quantizer-47
  64. 3
      tests/ref/fate/vp9-00-quantizer-48
  65. 3
      tests/ref/fate/vp9-00-quantizer-49
  66. 3
      tests/ref/fate/vp9-00-quantizer-50
  67. 3
      tests/ref/fate/vp9-00-quantizer-51
  68. 3
      tests/ref/fate/vp9-00-quantizer-52
  69. 3
      tests/ref/fate/vp9-00-quantizer-53
  70. 3
      tests/ref/fate/vp9-00-quantizer-54
  71. 3
      tests/ref/fate/vp9-00-quantizer-55
  72. 3
      tests/ref/fate/vp9-00-quantizer-56
  73. 3
      tests/ref/fate/vp9-00-quantizer-57
  74. 3
      tests/ref/fate/vp9-00-quantizer-58
  75. 3
      tests/ref/fate/vp9-00-quantizer-59
  76. 3
      tests/ref/fate/vp9-00-quantizer-60
  77. 3
      tests/ref/fate/vp9-00-quantizer-61
  78. 3
      tests/ref/fate/vp9-00-quantizer-62
  79. 3
      tests/ref/fate/vp9-00-quantizer-63
  80. 11
      tests/ref/fate/vp9-01-sharpness-1
  81. 11
      tests/ref/fate/vp9-01-sharpness-2
  82. 11
      tests/ref/fate/vp9-01-sharpness-3
  83. 11
      tests/ref/fate/vp9-01-sharpness-4
  84. 11
      tests/ref/fate/vp9-01-sharpness-5
  85. 11
      tests/ref/fate/vp9-01-sharpness-6
  86. 11
      tests/ref/fate/vp9-01-sharpness-7
  87. 11
      tests/ref/fate/vp9-02-size-08x08
  88. 11
      tests/ref/fate/vp9-02-size-08x10
  89. 11
      tests/ref/fate/vp9-02-size-08x16
  90. 11
      tests/ref/fate/vp9-02-size-08x18
  91. 11
      tests/ref/fate/vp9-02-size-08x32
  92. 11
      tests/ref/fate/vp9-02-size-08x34
  93. 11
      tests/ref/fate/vp9-02-size-08x64
  94. 11
      tests/ref/fate/vp9-02-size-08x66
  95. 11
      tests/ref/fate/vp9-02-size-10x08
  96. 11
      tests/ref/fate/vp9-02-size-10x10
  97. 11
      tests/ref/fate/vp9-02-size-10x16
  98. 11
      tests/ref/fate/vp9-02-size-10x18
  99. 11
      tests/ref/fate/vp9-02-size-10x32
  100. 11
      tests/ref/fate/vp9-02-size-10x34
  101. Some files were not shown because too many files have changed in this diff Show More

@ -36,6 +36,7 @@ version <next>
- make decoding alpha optional for prores, ffv1 and vp6 by setting
the skip_alpha flag.
- ladspa wrapper filter
- native VP9 decoder
version 2.0:

1
configure vendored

@ -1907,6 +1907,7 @@ vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
vp6a_decoder_select="vp6_decoder"
vp6f_decoder_select="vp6_decoder"
vp8_decoder_select="h264pred videodsp"
vp9_decoder_select="videodsp"
webp_decoder_select="vp8_decoder"
wmapro_decoder_select="mdct sinewin"
wmav1_decoder_select="mdct sinewin"

@ -94,7 +94,7 @@ Then pass @code{--enable-libtwolame} to configure to enable it.
@section libvpx
FFmpeg can make use of the libvpx library for VP8 encoding.
FFmpeg can make use of the libvpx library for VP8/VP9 encoding.
Go to @url{http://www.webmproject.org/} and follow the instructions for
installing the library. Then pass @code{--enable-libvpx} to configure to
@ -676,6 +676,8 @@ following image formats are supported:
@tab fourcc: VP60,VP61,VP62
@item VP8 @tab E @tab X
@tab fourcc: VP80, encoding supported through external library libvpx
@item VP9 @tab E @tab X
@tab encoding supported through external library libvpx
@item Pinnacle TARGA CineWave YUV16 @tab @tab X
@tab fourcc: Y216
@item Prores @tab @tab X

@ -471,6 +471,7 @@ OBJS-$(CONFIG_VP5_DECODER) += vp5.o vp56.o vp56data.o vp56dsp.o \
OBJS-$(CONFIG_VP6_DECODER) += vp6.o vp56.o vp56data.o vp56dsp.o \
vp6dsp.o vp56rac.o
OBJS-$(CONFIG_VP8_DECODER) += vp8.o vp8dsp.o vp56rac.o
OBJS-$(CONFIG_VP9_DECODER) += vp9.o vp9dsp.o vp56rac.o
OBJS-$(CONFIG_VPLAYER_DECODER) += textdec.o ass.o
OBJS-$(CONFIG_VQA_DECODER) += vqavideo.o
OBJS-$(CONFIG_WAVPACK_DECODER) += wavpack.o

@ -285,6 +285,7 @@ void avcodec_register_all(void)
REGISTER_DECODER(VP6A, vp6a);
REGISTER_DECODER(VP6F, vp6f);
REGISTER_DECODER(VP8, vp8);
REGISTER_DECODER(VP9, vp9);
REGISTER_DECODER(VQA, vqa);
REGISTER_DECODER(WEBP, webp);
REGISTER_ENCDEC (WMV1, wmv1);

File diff suppressed because it is too large Load Diff

@ -0,0 +1,72 @@
/*
* VP9 compatible video decoder
*
* Copyright (C) 2013 Ronald S. Bultje <rsbultje gmail com>
* Copyright (C) 2013 Clément Bœsch <u pkh me>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_VP9_H
#define AVCODEC_VP9_H
enum TxfmMode {
TX_4X4,
TX_8X8,
TX_16X16,
TX_32X32,
N_TXFM_SIZES,
TX_SWITCHABLE = N_TXFM_SIZES,
N_TXFM_MODES
};
enum TxfmType {
DCT_DCT,
DCT_ADST,
ADST_DCT,
ADST_ADST,
N_TXFM_TYPES
};
enum IntraPredMode {
VERT_PRED,
HOR_PRED,
DC_PRED,
DIAG_DOWN_LEFT_PRED,
DIAG_DOWN_RIGHT_PRED,
VERT_RIGHT_PRED,
HOR_DOWN_PRED,
VERT_LEFT_PRED,
HOR_UP_PRED,
TM_VP8_PRED,
LEFT_DC_PRED,
TOP_DC_PRED,
DC_128_PRED,
DC_127_PRED,
DC_129_PRED,
N_INTRA_PRED_MODES
};
enum FilterMode {
FILTER_8TAP_SMOOTH,
FILTER_8TAP_REGULAR,
FILTER_8TAP_SHARP,
FILTER_BILINEAR,
FILTER_SWITCHABLE,
};
#endif /* AVCODEC_VP9_H */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,117 @@
/*
* VP9 compatible video decoder
*
* Copyright (C) 2013 Ronald S. Bultje <rsbultje gmail com>
* Copyright (C) 2013 Clément Bœsch <u pkh me>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_VP9DSP_H
#define AVCODEC_VP9DSP_H
#include <stdint.h>
#include "vp9.h"
typedef void (*vp9_mc_func)(uint8_t *dst, ptrdiff_t dst_stride,
const uint8_t *ref, ptrdiff_t ref_stride,
int h, int mx, int my);
typedef struct VP9DSPContext {
/*
* dimension 1: 0=4x4, 1=8x8, 2=16x16, 3=32x32
* dimension 2: intra prediction modes
*
* dst/left/top is aligned by transform-size (i.e. 4, 8, 16 or 32 pixels)
* stride is aligned by 16 pixels
* top[-1] is top/left; top[4,7] is top-right for 4x4
*/
// FIXME(rbultje) maybe replace left/top pointers with HAVE_TOP/
// HAVE_LEFT/HAVE_TOPRIGHT flags instead, and then handle it in-place?
// also needs to fit in with what h264/vp8/etc do
void (*intra_pred[N_TXFM_SIZES][N_INTRA_PRED_MODES])(uint8_t *dst,
ptrdiff_t stride,
const uint8_t *left,
const uint8_t *top);
/*
* dimension 1: 0=4x4, 1=8x8, 2=16x16, 3=32x32, 4=lossless (3-4=dct only)
* dimension 2: 0=dct/dct, 1=dct/adst, 2=adst/dct, 3=adst/adst
*
* dst is aligned by transform-size (i.e. 4, 8, 16 or 32 pixels)
* stride is aligned by 16 pixels
* block is 16-byte aligned
* eob indicates the position (+1) of the last non-zero coefficient,
* in scan-order. This can be used to write faster versions, e.g. a
* dc-only 4x4/8x8/16x16/32x32, or a 4x4-only (eob<10) 8x8/16x16/32x32,
* etc.
*/
// FIXME also write idct_add_block() versions for whole (inter) pred
// blocks, so we can do 2 4x4s at once
void (*itxfm_add[N_TXFM_SIZES + 1][N_TXFM_TYPES])(uint8_t *dst,
ptrdiff_t stride,
int16_t *block, int eob);
/*
* dimension 1: width of filter (0=4, 1=8, 2=16)
* dimension 2: 0=col-edge filter (h), 1=row-edge filter (v)
*
* dst/stride are aligned by 8
*/
void (*loop_filter_8[3][2])(uint8_t *dst, ptrdiff_t stride,
int mb_lim, int lim, int hev_thr);
/*
* dimension 1: 0=col-edge filter (h), 1=row-edge filter (v)
*
* The width of filter is assumed to be 16; dst/stride are aligned by 16
*/
void (*loop_filter_16[2])(uint8_t *dst, ptrdiff_t stride,
int mb_lim, int lim, int hev_thr);
/*
* dimension 1/2: width of filter (0=4, 1=8) for each filter half
* dimension 3: 0=col-edge filter (h), 1=row-edge filter (v)
*
* dst/stride are aligned by operation size
* this basically calls loop_filter[d1][d3][0](), followed by
* loop_filter[d2][d3][0]() on the next 8 pixels
* mb_lim/lim/hev_thr contain two values in the lowest two bytes of the
* integer.
*/
// FIXME perhaps a mix4 that operates on 32px (for AVX2)
void (*loop_filter_mix2[2][2][2])(uint8_t *dst, ptrdiff_t stride,
int mb_lim, int lim, int hev_thr);
/*
* dimension 1: hsize (0: 64, 1: 32, 2: 16, 3: 8, 4: 4)
* dimension 2: filter type (0: smooth, 1: regular, 2: sharp, 3: bilin)
* dimension 3: averaging type (0: put, 1: avg)
* dimension 4: x subpel interpolation (0: none, 1: 8tap/bilin)
* dimension 5: y subpel interpolation (1: none, 1: 8tap/bilin)
*
* dst/stride are aligned by hsize
*/
vp9_mc_func mc[5][4][2][2][2];
} VP9DSPContext;
void ff_vp9dsp_init(VP9DSPContext *dsp);
void ff_vp9dsp_init_x86(VP9DSPContext *dsp);
#endif /* AVCODEC_VP9DSP_H */

@ -34,6 +34,7 @@ OBJS-$(CONFIG_VORBIS_DECODER) += x86/vorbisdsp_init.o
OBJS-$(CONFIG_VP3DSP) += x86/vp3dsp_init.o
OBJS-$(CONFIG_VP6_DECODER) += x86/vp6dsp_init.o
OBJS-$(CONFIG_VP8_DECODER) += x86/vp8dsp_init.o
OBJS-$(CONFIG_VP9_DECODER) += x86/vp9dsp_init.o
OBJS-$(CONFIG_WEBP_DECODER) += x86/vp8dsp_init.o
OBJS-$(CONFIG_XMM_CLOBBER_TEST) += x86/w64xmmtest.o
@ -98,4 +99,5 @@ YASM-OBJS-$(CONFIG_VORBIS_DECODER) += x86/vorbisdsp.o
YASM-OBJS-$(CONFIG_VP3DSP) += x86/vp3dsp.o
YASM-OBJS-$(CONFIG_VP6_DECODER) += x86/vp6dsp.o
YASM-OBJS-$(CONFIG_VP8_DECODER) += x86/vp8dsp.o
YASM-OBJS-$(CONFIG_VP9_DECODER) += x86/vp9dsp.o
YASM-OBJS-$(CONFIG_WEBP_DECODER) += x86/vp8dsp.o

@ -0,0 +1,278 @@
;******************************************************************************
;* VP9 SIMD optimizations
;*
;* Copyright (c) 2013 Ronald S. Bultje <rsbultje gmail com>
;*
;* This file is part of FFmpeg.
;*
;* FFmpeg is free software; you can redistribute it and/or
;* modify it under the terms of the GNU Lesser General Public
;* License as published by the Free Software Foundation; either
;* version 2.1 of the License, or (at your option) any later version.
;*
;* FFmpeg is distributed in the hope that it will be useful,
;* but WITHOUT ANY WARRANTY; without even the implied warranty of
;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;* Lesser General Public License for more details.
;*
;* You should have received a copy of the GNU Lesser General Public
;* License along with FFmpeg; if not, write to the Free Software
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "libavutil/x86/x86util.asm"
SECTION_RODATA
; FIXME share with vp8dsp.asm
pw_256: times 8 dw 256
%macro F8_TAPS 8
times 8 db %1, %2
times 8 db %3, %4
times 8 db %5, %6
times 8 db %7, %8
%endmacro
; int8_t ff_filters_ssse3[3][15][4][16]
const filters_ssse3 ; smooth
F8_TAPS -3, -1, 32, 64, 38, 1, -3, 0
F8_TAPS -2, -2, 29, 63, 41, 2, -3, 0
F8_TAPS -2, -2, 26, 63, 43, 4, -4, 0
F8_TAPS -2, -3, 24, 62, 46, 5, -4, 0
F8_TAPS -2, -3, 21, 60, 49, 7, -4, 0
F8_TAPS -1, -4, 18, 59, 51, 9, -4, 0
F8_TAPS -1, -4, 16, 57, 53, 12, -4, -1
F8_TAPS -1, -4, 14, 55, 55, 14, -4, -1
F8_TAPS -1, -4, 12, 53, 57, 16, -4, -1
F8_TAPS 0, -4, 9, 51, 59, 18, -4, -1
F8_TAPS 0, -4, 7, 49, 60, 21, -3, -2
F8_TAPS 0, -4, 5, 46, 62, 24, -3, -2
F8_TAPS 0, -4, 4, 43, 63, 26, -2, -2
F8_TAPS 0, -3, 2, 41, 63, 29, -2, -2
F8_TAPS 0, -3, 1, 38, 64, 32, -1, -3
; regular
F8_TAPS 0, 1, -5, 126, 8, -3, 1, 0
F8_TAPS -1, 3, -10, 122, 18, -6, 2, 0
F8_TAPS -1, 4, -13, 118, 27, -9, 3, -1
F8_TAPS -1, 4, -16, 112, 37, -11, 4, -1
F8_TAPS -1, 5, -18, 105, 48, -14, 4, -1
F8_TAPS -1, 5, -19, 97, 58, -16, 5, -1
F8_TAPS -1, 6, -19, 88, 68, -18, 5, -1
F8_TAPS -1, 6, -19, 78, 78, -19, 6, -1
F8_TAPS -1, 5, -18, 68, 88, -19, 6, -1
F8_TAPS -1, 5, -16, 58, 97, -19, 5, -1
F8_TAPS -1, 4, -14, 48, 105, -18, 5, -1
F8_TAPS -1, 4, -11, 37, 112, -16, 4, -1
F8_TAPS -1, 3, -9, 27, 118, -13, 4, -1
F8_TAPS 0, 2, -6, 18, 122, -10, 3, -1
F8_TAPS 0, 1, -3, 8, 126, -5, 1, 0
; sharp
F8_TAPS -1, 3, -7, 127, 8, -3, 1, 0
F8_TAPS -2, 5, -13, 125, 17, -6, 3, -1
F8_TAPS -3, 7, -17, 121, 27, -10, 5, -2
F8_TAPS -4, 9, -20, 115, 37, -13, 6, -2
F8_TAPS -4, 10, -23, 108, 48, -16, 8, -3
F8_TAPS -4, 10, -24, 100, 59, -19, 9, -3
F8_TAPS -4, 11, -24, 90, 70, -21, 10, -4
F8_TAPS -4, 11, -23, 80, 80, -23, 11, -4
F8_TAPS -4, 10, -21, 70, 90, -24, 11, -4
F8_TAPS -3, 9, -19, 59, 100, -24, 10, -4
F8_TAPS -3, 8, -16, 48, 108, -23, 10, -4
F8_TAPS -2, 6, -13, 37, 115, -20, 9, -4
F8_TAPS -2, 5, -10, 27, 121, -17, 7, -3
F8_TAPS -1, 3, -6, 17, 125, -13, 5, -2
F8_TAPS 0, 1, -3, 8, 127, -7, 3, -1
SECTION .text
%macro filter_h_fn 1
%assign %%px mmsize/2
cglobal %1_8tap_1d_h_%%px, 6, 6, 11, dst, dstride, src, sstride, h, filtery
mova m6, [pw_256]
mova m7, [filteryq+ 0]
%if ARCH_X86_64 && mmsize > 8
mova m8, [filteryq+16]
mova m9, [filteryq+32]
mova m10, [filteryq+48]
%endif
.loop:
movh m0, [srcq-3]
movh m1, [srcq-2]
movh m2, [srcq-1]
movh m3, [srcq+0]
movh m4, [srcq+1]
movh m5, [srcq+2]
punpcklbw m0, m1
punpcklbw m2, m3
movh m1, [srcq+3]
movh m3, [srcq+4]
add srcq, sstrideq
punpcklbw m4, m5
punpcklbw m1, m3
pmaddubsw m0, m7
%if ARCH_X86_64 && mmsize > 8
pmaddubsw m2, m8
pmaddubsw m4, m9
pmaddubsw m1, m10
%else
pmaddubsw m2, [filteryq+16]
pmaddubsw m4, [filteryq+32]
pmaddubsw m1, [filteryq+48]
%endif
paddw m0, m2
paddw m4, m1
paddsw m0, m4
pmulhrsw m0, m6
%ifidn %1, avg
movh m1, [dstq]
%endif
packuswb m0, m0
%ifidn %1, avg
pavgb m0, m1
%endif
movh [dstq], m0
add dstq, dstrideq
dec hd
jg .loop
RET
%endmacro
INIT_MMX ssse3
filter_h_fn put
filter_h_fn avg
INIT_XMM ssse3
filter_h_fn put
filter_h_fn avg
%macro filter_v_fn 1
%assign %%px mmsize/2
%if ARCH_X86_64
cglobal %1_8tap_1d_v_%%px, 6, 8, 11, dst, dstride, src, sstride, h, filtery, src4, sstride3
%else
cglobal %1_8tap_1d_v_%%px, 4, 7, 11, dst, dstride, src, sstride, filtery, src4, sstride3
mov filteryq, r5mp
%define hd r4mp
%endif
sub srcq, sstrideq
lea sstride3q, [sstrideq*3]
sub srcq, sstrideq
mova m6, [pw_256]
sub srcq, sstrideq
mova m7, [filteryq+ 0]
lea src4q, [srcq+sstrideq*4]
%if ARCH_X86_64 && mmsize > 8
mova m8, [filteryq+16]
mova m9, [filteryq+32]
mova m10, [filteryq+48]
%endif
.loop:
; FIXME maybe reuse loads from previous rows, or just
; more generally unroll this to prevent multiple loads of
; the same data?
movh m0, [srcq]
movh m1, [srcq+sstrideq]
movh m2, [srcq+sstrideq*2]
movh m3, [srcq+sstride3q]
movh m4, [src4q]
movh m5, [src4q+sstrideq]
punpcklbw m0, m1
punpcklbw m2, m3
movh m1, [src4q+sstrideq*2]
movh m3, [src4q+sstride3q]
add srcq, sstrideq
add src4q, sstrideq
punpcklbw m4, m5
punpcklbw m1, m3
pmaddubsw m0, m7
%if ARCH_X86_64 && mmsize > 8
pmaddubsw m2, m8
pmaddubsw m4, m9
pmaddubsw m1, m10
%else
pmaddubsw m2, [filteryq+16]
pmaddubsw m4, [filteryq+32]
pmaddubsw m1, [filteryq+48]
%endif
paddw m0, m2
paddw m4, m1
paddsw m0, m4
pmulhrsw m0, m6
%ifidn %1, avg
movh m1, [dstq]
%endif
packuswb m0, m0
%ifidn %1, avg
pavgb m0, m1
%endif
movh [dstq], m0
add dstq, dstrideq
dec hd
jg .loop
RET
%endmacro
INIT_MMX ssse3
filter_v_fn put
filter_v_fn avg
INIT_XMM ssse3
filter_v_fn put
filter_v_fn avg
%macro fpel_fn 6
%if %2 == 4
%define %%srcfn movh
%define %%dstfn movh
%else
%define %%srcfn movu
%define %%dstfn mova
%endif
%if %2 <= 16
cglobal %1%2, 5, 7, 4, dst, dstride, src, sstride, h, dstride3, sstride3
lea sstride3q, [sstrideq*3]
lea dstride3q, [dstrideq*3]
%else
cglobal %1%2, 5, 5, 4, dst, dstride, src, sstride, h
%endif
.loop:
%%srcfn m0, [srcq]
%%srcfn m1, [srcq+s%3]
%%srcfn m2, [srcq+s%4]
%%srcfn m3, [srcq+s%5]
lea srcq, [srcq+sstrideq*%6]
%ifidn %1, avg
pavgb m0, [dstq]
pavgb m1, [dstq+d%3]
pavgb m2, [dstq+d%4]
pavgb m3, [dstq+d%5]
%endif
%%dstfn [dstq], m0
%%dstfn [dstq+d%3], m1
%%dstfn [dstq+d%4], m2
%%dstfn [dstq+d%5], m3
lea dstq, [dstq+dstrideq*%6]
sub hd, %6
jnz .loop
RET
%endmacro
%define d16 16
%define s16 16
INIT_MMX mmx
fpel_fn put, 4, strideq, strideq*2, stride3q, 4
fpel_fn put, 8, strideq, strideq*2, stride3q, 4
INIT_MMX sse
fpel_fn avg, 4, strideq, strideq*2, stride3q, 4
fpel_fn avg, 8, strideq, strideq*2, stride3q, 4
INIT_XMM sse
fpel_fn put, 16, strideq, strideq*2, stride3q, 4
fpel_fn put, 32, mmsize, strideq, strideq+mmsize, 2
fpel_fn put, 64, mmsize, mmsize*2, mmsize*3, 1
INIT_XMM sse2
fpel_fn avg, 16, strideq, strideq*2, stride3q, 4
fpel_fn avg, 32, mmsize, strideq, strideq+mmsize, 2
fpel_fn avg, 64, mmsize, mmsize*2, mmsize*3, 1
%undef s16
%undef d16

@ -0,0 +1,214 @@
/*
* VP9 SIMD optimizations
*
* Copyright (c) 2013 Ronald S. Bultje <rsbultje gmail com>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "libavutil/cpu.h"
#include "libavutil/mem.h"
#include "libavutil/x86/asm.h"
#include "libavcodec/vp9dsp.h"
#if HAVE_YASM
#define fpel_func(avg, sz, opt) \
void ff_##avg##sz##_##opt(uint8_t *dst, ptrdiff_t dst_stride, \
const uint8_t *src, ptrdiff_t src_stride, \
int h, int mx, int my)
fpel_func(put, 4, mmx);
fpel_func(put, 8, mmx);
fpel_func(put, 16, sse);
fpel_func(put, 32, sse);
fpel_func(put, 64, sse);
fpel_func(avg, 4, sse);
fpel_func(avg, 8, sse);
fpel_func(avg, 16, sse2);
fpel_func(avg, 32, sse2);
fpel_func(avg, 64, sse2);
#undef fpel_func
#define mc_func(avg, sz, dir, opt) \
void ff_##avg##_8tap_1d_##dir##_##sz##_##opt(uint8_t *dst, ptrdiff_t dst_stride, \
const uint8_t *src, ptrdiff_t src_stride, \
int h, const int8_t (*filter)[16])
#define mc_funcs(sz) \
mc_func(put, sz, h, ssse3); \
mc_func(avg, sz, h, ssse3); \
mc_func(put, sz, v, ssse3); \
mc_func(avg, sz, v, ssse3)
mc_funcs(4);
mc_funcs(8);
#undef mc_funcs
#undef mc_func
#define mc_rep_func(avg, sz, hsz, dir, opt) \
static av_always_inline void \
ff_##avg##_8tap_1d_##dir##_##sz##_##opt(uint8_t *dst, ptrdiff_t dst_stride, \
const uint8_t *src, ptrdiff_t src_stride, \
int h, const int8_t (*filter)[16]) \
{ \
ff_##avg##_8tap_1d_##dir##_##hsz##_##opt(dst, dst_stride, src, \
src_stride, h, filter); \
ff_##avg##_8tap_1d_##dir##_##hsz##_##opt(dst + hsz, dst_stride, src + hsz, \
src_stride, h, filter); \
}
#define mc_rep_funcs(sz, hsz) \
mc_rep_func(put, sz, hsz, h, ssse3); \
mc_rep_func(avg, sz, hsz, h, ssse3); \
mc_rep_func(put, sz, hsz, v, ssse3); \
mc_rep_func(avg, sz, hsz, v, ssse3)
mc_rep_funcs(16, 8);
mc_rep_funcs(32, 16);
mc_rep_funcs(64, 32);
#undef mc_rep_funcs
#undef mc_rep_func
extern const int8_t ff_filters_ssse3[3][15][4][16];
#define filter_8tap_2d_fn(op, sz, f, fname) \
static void op##_8tap_##fname##_##sz##hv_ssse3(uint8_t *dst, ptrdiff_t dst_stride, \
const uint8_t *src, ptrdiff_t src_stride, \
int h, int mx, int my) \
{ \
LOCAL_ALIGNED_16(uint8_t, temp, [71 * 64]); \
ff_put_8tap_1d_h_##sz##_ssse3(temp, 64, src - 3 * src_stride, src_stride, \
h + 7, ff_filters_ssse3[f][mx - 1]); \
ff_##op##_8tap_1d_v_##sz##_ssse3(dst, dst_stride, temp + 3 * 64, 64, \
h, ff_filters_ssse3[f][my - 1]); \
}
#define filters_8tap_2d_fn(op, sz) \
filter_8tap_2d_fn(op, sz, FILTER_8TAP_REGULAR, regular) \
filter_8tap_2d_fn(op, sz, FILTER_8TAP_SHARP, sharp) \
filter_8tap_2d_fn(op, sz, FILTER_8TAP_SMOOTH, smooth)
#define filters_8tap_2d_fn2(op) \
filters_8tap_2d_fn(op, 64) \
filters_8tap_2d_fn(op, 32) \
filters_8tap_2d_fn(op, 16) \
filters_8tap_2d_fn(op, 8) \
filters_8tap_2d_fn(op, 4)
filters_8tap_2d_fn2(put)
filters_8tap_2d_fn2(avg)
#undef filters_8tap_2d_fn2
#undef filters_8tap_2d_fn
#undef filter_8tap_2d_fn
#define filter_8tap_1d_fn(op, sz, f, fname, dir, dvar) \
static void op##_8tap_##fname##_##sz##dir##_ssse3(uint8_t *dst, ptrdiff_t dst_stride, \
const uint8_t *src, ptrdiff_t src_stride, \
int h, int mx, int my) \
{ \
ff_##op##_8tap_1d_##dir##_##sz##_ssse3(dst, dst_stride, src, src_stride, \
h, ff_filters_ssse3[f][dvar - 1]); \
}
#define filters_8tap_1d_fn(op, sz, dir, dvar) \
filter_8tap_1d_fn(op, sz, FILTER_8TAP_REGULAR, regular, dir, dvar) \
filter_8tap_1d_fn(op, sz, FILTER_8TAP_SHARP, sharp, dir, dvar) \
filter_8tap_1d_fn(op, sz, FILTER_8TAP_SMOOTH, smooth, dir, dvar)
#define filters_8tap_1d_fn2(op, sz) \
filters_8tap_1d_fn(op, sz, h, mx) \
filters_8tap_1d_fn(op, sz, v, my)
#define filters_8tap_1d_fn3(op) \
filters_8tap_1d_fn2(op, 64) \
filters_8tap_1d_fn2(op, 32) \
filters_8tap_1d_fn2(op, 16) \
filters_8tap_1d_fn2(op, 8) \
filters_8tap_1d_fn2(op, 4)
filters_8tap_1d_fn3(put)
filters_8tap_1d_fn3(avg)
#undef filters_8tap_1d_fn
#undef filters_8tap_1d_fn2
#undef filters_8tap_1d_fn3
#undef filter_8tap_1d_fn
#endif /* HAVE_YASM */
av_cold void ff_vp9dsp_init_x86(VP9DSPContext *dsp)
{
#if HAVE_YASM
int cpu_flags = av_get_cpu_flags();
#define init_fpel(idx1, idx2, sz, type, opt) \
dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][0][0] = \
dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][0][0] = \
dsp->mc[idx1][FILTER_8TAP_SHARP ][idx2][0][0] = \
dsp->mc[idx1][FILTER_BILINEAR ][idx2][0][0] = ff_##type##sz##_##opt
#define init_subpel1(idx1, idx2, idxh, idxv, sz, dir, type, opt) \
dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][idxh][idxv] = type##_8tap_smooth_##sz##dir##_##opt; \
dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][idxh][idxv] = type##_8tap_regular_##sz##dir##_##opt; \
dsp->mc[idx1][FILTER_8TAP_SHARP ][idx2][idxh][idxv] = type##_8tap_sharp_##sz##dir##_##opt
#define init_subpel2(idx, idxh, idxv, dir, type, opt) \
init_subpel1(0, idx, idxh, idxv, 64, dir, type, opt); \
init_subpel1(1, idx, idxh, idxv, 32, dir, type, opt); \
init_subpel1(2, idx, idxh, idxv, 16, dir, type, opt); \
init_subpel1(3, idx, idxh, idxv, 8, dir, type, opt); \
init_subpel1(4, idx, idxh, idxv, 4, dir, type, opt)
#define init_subpel3(idx, type, opt) \
init_subpel2(idx, 1, 1, hv, type, opt); \
init_subpel2(idx, 0, 1, v, type, opt); \
init_subpel2(idx, 1, 0, h, type, opt)
if (cpu_flags & AV_CPU_FLAG_MMX) {
init_fpel(4, 0, 4, put, mmx);
init_fpel(3, 0, 8, put, mmx);
}
if (cpu_flags & AV_CPU_FLAG_SSE) {
init_fpel(2, 0, 16, put, sse);
init_fpel(1, 0, 32, put, sse);
init_fpel(0, 0, 64, put, sse);
init_fpel(4, 1, 4, avg, sse);
init_fpel(3, 1, 8, avg, sse);
}
if (cpu_flags & AV_CPU_FLAG_SSE2) {
init_fpel(2, 1, 16, avg, sse2);
init_fpel(1, 1, 32, avg, sse2);
init_fpel(0, 1, 64, avg, sse2);
}
if (cpu_flags & AV_CPU_FLAG_SSSE3) {
init_subpel3(0, put, ssse3);
init_subpel3(1, avg, ssse3);
}
#undef init_fpel
#undef init_subpel1
#undef init_subpel2
#undef init_subpel3
#endif /* HAVE_YASM */
}

@ -700,7 +700,7 @@ DECLARE_ARG 7, 8, 9, 10, 11, 12, 13, 14
extern %1
%endmacro
%macro const 2+
%macro const 1-2+
%xdefine %1 mangle(private_prefix %+ _ %+ %1)
global %1
%1: %2

@ -57,3 +57,33 @@ $(eval $(call FATE_VP8_FULL))
$(eval $(call FATE_VP8_FULL,-emu-edge,-flags +emu_edge))
FATE_SAMPLES_AVCONV-$(CONFIG_VP8_DECODER) += $(FATE_VP8-yes)
fate-vp8: $(FATE_VP8-yes)
define FATE_VP9_SUITE
FATE_VP9-$(CONFIG_MATROSKA_DEMUXER) += fate-vp9$(2)-$(1)
fate-vp9$(2)-$(1): CMD = framemd5 $(3) -i $(TARGET_SAMPLES)/vp9-test-vectors/vp90-2-$(1).webm
fate-vp9$(2)-$(1): REF = $(SRC_PATH)/tests/ref/fate/vp9-$(1)
endef
VP9_Q = 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 \
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 \
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 \
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
VP9_SHARP = 1 2 3 4 5 6 7
VP9_SIZE_A = 08 10 16 18 32 34 64 66
VP9_SIZE_B = 196 198 200 202 208 210 224 226
define FATE_VP9_FULL
$(foreach Q,$(VP9_Q),$(eval $(call FATE_VP9_SUITE,00-quantizer-$(Q),$(1),$(2))))
$(foreach SHARP,$(VP9_SHARP),$(eval $(call FATE_VP9_SUITE,01-sharpness-$(SHARP),$(1),$(2))))
$(foreach W,$(VP9_SIZE_A),$(eval $(foreach H,$(VP9_SIZE_A),$(eval $(call FATE_VP9_SUITE,02-size-$(W)x$(H),$(1),$(2))))))
$(foreach W,$(VP9_SIZE_B),$(eval $(foreach H,$(VP9_SIZE_B),$(eval $(call FATE_VP9_SUITE,03-size-$(W)x$(H),$(1),$(2))))))
$(eval $(call FATE_VP9_SUITE,03-deltaq,$(1),$(2)))
$(eval $(call FATE_VP9_SUITE,2pass-akiyo,$(1),$(2)))
$(eval $(call FATE_VP9_SUITE,segmentation-akiyo,$(1),$(2)))
$(eval $(call FATE_VP9_SUITE,tiling-pedestrian,$(1),$(2)))
endef
$(eval $(call FATE_VP9_FULL))
$(eval $(call FATE_VP9_FULL,-emu-edge,-flags +emu_edge))
FATE_SAMPLES_AVCONV-$(CONFIG_VP9_DECODER) += $(FATE_VP9-yes)
fate-vp9: $(FATE_VP9-yes)

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, c3fbb7abbdb5bd4ed4a7e34768c17df1
0, 1, 1, 1, 152064, 08203c2595bdb2d58ead6f921345d699

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, f041b870cf9236d5f22e2b08a77d5958
0, 1, 1, 1, 152064, cbdb7526986ae15592891488c9afc84c

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 98048cfdb4af5059f4085c5acc94ef8f
0, 1, 1, 1, 152064, 8160183e1eed1d0af4427be216b8b9f7

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 15c548208f5eda243a151a42f4d64855
0, 1, 1, 1, 152064, e96d463dc8e9b27b1c2ec40f77eee6ef

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 928c64a0747ac57ab50c1520d694fea7
0, 1, 1, 1, 152064, a6f6daa293231e95ef30ed168f582c84

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 082460718b7d7046c8fb23184b7f71ca
0, 1, 1, 1, 152064, 4a41aad51c40a92df72333e13f47d3fe

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, cfca1bed96ff62a69b2d841fda01c6b9
0, 1, 1, 1, 152064, 9b4d61f1b998745c108f8eb67925e03d

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 6f5122064bead9d9882bec2698a6ed9c
0, 1, 1, 1, 152064, 50dae67d2f57a76eece210dee8b6df9e

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, eb3d6985fcda5d93dd62d53354e8a093
0, 1, 1, 1, 152064, 5b1f5b7780b4cafe1f75e56a0b526643

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, d7ccaf28c59875fe91983def5490d2b1
0, 1, 1, 1, 152064, bd98fe9492054826748de840b4495309

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 20dda6231f9801c9c237c6d09d9939b6
0, 1, 1, 1, 152064, 23c91e93807fb9a4ed5bd5bdd449d99f

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 960833315ebcdee97f46c4d98d0f3fef
0, 1, 1, 1, 152064, eec40507d17b64b7895a61cb87b2096a

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 6533224d3b6ba1ec0dd973bbe56c6349
0, 1, 1, 1, 152064, 12ceadc6d28327a24a75f8c40b6084d1

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 7268de6756014f79a56dcf010c52a97f
0, 1, 1, 1, 152064, 9e39e9b0e2295b8460dfa05f44762771

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 57e9e333c641fa952f7485b788df225a
0, 1, 1, 1, 152064, 551f0cea83dcdf4540c3983736757874

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 17a0a2842856b9e89aede237648d5dda
0, 1, 1, 1, 152064, c9fcade888a38621bebe3d4b41664245

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 6cc2089e9a3d352fe10b59ccd935c677
0, 1, 1, 1, 152064, d165bf7b9cb901e121a65038758d8613

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, bc80511c83162c09661f155cd29f6dd8
0, 1, 1, 1, 152064, a62f1cbdb3f86d2fb4c880cfd917def5

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, b2d350f6faa41cb50c2e8a9907d0f4a5
0, 1, 1, 1, 152064, 39b4380d16bc8e093dd4dba475175fb3

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 441e09be3c15fcb240afd74bb7a10a72
0, 1, 1, 1, 152064, 32ae5dac876ca5d5ae6ab7c74f4dc25d

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 7786eb9944dba0553e129133523a98c1
0, 1, 1, 1, 152064, 206d888f8453427f10a40aa8bf5f6df0

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, aab95e195be71feca050a839d7b3154d
0, 1, 1, 1, 152064, 02a05d699bbbdc477e34bb0dad9f0391

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 41f853c3ee2d4611b645cc643d82e287
0, 1, 1, 1, 152064, 1c240c653110ff8609ca0f0287a6496d

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, bc5b07369df50c8f97ce1a377fe513cf
0, 1, 1, 1, 152064, ce62ddb4f3e305d0f8587ae8bb44cc79

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 982d54041221c977b6f0e37a9236cc76
0, 1, 1, 1, 152064, 57631e7f13f645c834e2944ebfd6d40e

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, b0fb55f3f2f56b3d27038e83c10123ce
0, 1, 1, 1, 152064, 9fcac3becdcc2d30d778a55eca4c2018

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 4f645e0f354da77b9e2f2a6753c361da
0, 1, 1, 1, 152064, b7542998ec298273ca662bc9b658d10e

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 6edc96a3747cad43828397045764206e
0, 1, 1, 1, 152064, 5fbc65d20fdca1abd69079851ce676d3

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 5db3e910e70da38bb91d01d73acc33dd
0, 1, 1, 1, 152064, b920ee7f7e61b7fdf9f44b1f738d0292

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 3cb3e310be5305077efa6216f6f10654
0, 1, 1, 1, 152064, 692d3e098af5978fe1a898ebc1a66a7a

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, e3b3cea66ea38c5dfba1aa73bb4c611d
0, 1, 1, 1, 152064, 42bb3e54b19c3f4c4f7ee3a6ba012e19

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 2523e9ecfd3781eafcd7da192dc105e9
0, 1, 1, 1, 152064, 6d5feea012b9a1f51fc643633e728764

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 0a0305eba36500ebf6cc6cc0f01f5a3b
0, 1, 1, 1, 152064, 2c76bcd6763467f9057a726fbcf50ab1

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, c68433e0e94047c220be9b629334f744
0, 1, 1, 1, 152064, fcfa4dff7a39bc9c5e315849ecbb46ea

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, ad9dc2f912c137b014a33e2792c88a25
0, 1, 1, 1, 152064, 11221ee4ea5c776f43af68756682cd5a

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 75031f898cccf303a64ab46b1f815389
0, 1, 1, 1, 152064, a4fc864e7fbc470dfcab6207e0eea152

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, c7824af009fde6cafdd8d39fae6bb6cf
0, 1, 1, 1, 152064, 516a82d5fc4dfa3daf713ed2ec36041b

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, fb23e0bc64728a492a33d985032f21b8

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 8347bfb891317e89ef66781d6c28e24f
0, 1, 1, 1, 152064, a5722f824d32deac042513a1a7dcdcd0

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 018968f97fac3bdff146cf22c1da5ef0
0, 1, 1, 1, 152064, ca8b09b01e5132183395e238f1c7901e

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 792660f6589ad5340be4bd0554435866
0, 1, 1, 1, 152064, 68c84c8a15d679e0a73678b93215c62c

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a456bdfc6c1c07b4cb3a3848843743b9
0, 1, 1, 1, 152064, fe41a12b8cb6bc5667ba2179e076f3b0

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, f016dd8431694d989700fb1ba71a5b2d
0, 1, 1, 1, 152064, e89c3c5b935157b40f2fb0ab92415828

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 7b8ab82625f3006bac89d4fb5197e71c
0, 1, 1, 1, 152064, 18bd3716045563dfba2c72b640b3274b

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 66fde04d8320c750e56406feefd29979
0, 1, 1, 1, 152064, f9d01d8fc1722ec345e624e14b404215

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, cc97597b015896d73f3e60e7ae44c4da
0, 1, 1, 1, 152064, fea98bc508f92135641ab99762444b14

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 79ed95c741178bb3c0954f1f6f8e21a3
0, 1, 1, 1, 152064, f02a06a5e2b5b7619c9a52c5bea0564d

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 9b98e948b8c2a822f21bd8419e6f4410
0, 1, 1, 1, 152064, 491382d68c16c2a3c6f1746598bc4a97

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, f0f095b0edae7262f44d7ed7ef84ded4
0, 1, 1, 1, 152064, 0e833889ccac81d60251007d1baf6500

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 6c1b7b7827617fb9b8417aca2cfdbcaa
0, 1, 1, 1, 152064, 4c1fc8a89297fdcf79f0faabd42b8684

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, ca6142db68463487bc28c888ab38476c
0, 1, 1, 1, 152064, 02a71153ec70f569524c3d814cb62f86

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, eece2627df1ddf0872256eb92352e179
0, 1, 1, 1, 152064, 0ee9f221246ad747250e4b5e8ba586e2

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 7290039d974c4e50db9d69f9864bcdbe
0, 1, 1, 1, 152064, 264765de9d02503038a4da54133b9f85

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 917af24da66f143a56a01eb2c2254285
0, 1, 1, 1, 152064, 45a05d3bc644420519619e4115662a70

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 6fea2820bb10a9dec9add4d2452b01f5
0, 1, 1, 1, 152064, 74675169a4bfc2ff5463c4db5d85a79f

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 11e5d196f6537fb7d85988d90195e556
0, 1, 1, 1, 152064, 8536106795f7c93c5a43a11493527469

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 40839b7a3a40ec10f96b8a75224f646d
0, 1, 1, 1, 152064, 11408dd73e8c45ddaab99f5c9650102b

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, d0e9fa03dd48da4592ebaadb4e3794e0
0, 1, 1, 1, 152064, 5172e29b1e04cd543833d6a68aab297c

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, bef4a27d460e7697e038fe6f1c8bd597
0, 1, 1, 1, 152064, 124674686cafc5f2ff5bc7ea412b8f3b

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, ae9d99e9d16ef20073300559566844ae
0, 1, 1, 1, 152064, da9405e5a6bfe4ed18d927ba2004008e

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 9e66bb8e1b5e206ea4afe4bf2d335ac5
0, 1, 1, 1, 152064, 092b74c905c12c1e87e90f5a79857736

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, d062dc6be246c8042744018765ef50a8
0, 1, 1, 1, 152064, 45fd9cbacb6a91060a7e49a58a85869d

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 62f7e42fe653e81c5a65a25389e045b5
0, 1, 1, 1, 152064, cb0cdd0b25689e0a43328550011d960d

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 8467643dceff827e04acd82eeff1d1b0
0, 1, 1, 1, 152064, c786f49d66f4dfd685dea9605821a19f

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, aa20a75be3a316193496706c9f760d08
0, 2, 2, 1, 152064, 95567be97a64d3c9efe45f2524116a2e
0, 3, 3, 1, 152064, 219e86cd6b3cca312856eead21776b1c
0, 4, 4, 1, 152064, 4a67fd359ca362398e97c15eb018a2bb
0, 5, 5, 1, 152064, 9916d4e359274d690827f0eb22547423
0, 6, 6, 1, 152064, a07785b52561150c48f1a8eff89d5d75
0, 7, 7, 1, 152064, a3382a92982953dfa20018e5ac975b51
0, 8, 8, 1, 152064, 911836989ca7b148438aa3ec7fc7e303
0, 9, 9, 1, 152064, 5627b981e3fc9e4401d35d3a5ab25917

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, cd94572239817ae7c9b07de739c3272b
0, 2, 2, 1, 152064, 383cf752d457e122b5ff49d08960208e
0, 3, 3, 1, 152064, 1c0a6ec9cd3ce29b8b004e7526f1b07e
0, 4, 4, 1, 152064, 91c42a8a108d67947cabfc2a5a80df66
0, 5, 5, 1, 152064, 08c57fc1f3fec0305883315a66c714d1
0, 6, 6, 1, 152064, 70cb8d8dc83eac82f2d3c4b0376bb1aa
0, 7, 7, 1, 152064, ffd62a9ef829ec81f0f74f740488a41f
0, 8, 8, 1, 152064, bab0aa23b5854e2a70926046e4618710
0, 9, 9, 1, 152064, fec456f38f2a43661e786a8d5f67ed15

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, 0d487a146393a0b8b84b4be1b371b507
0, 2, 2, 1, 152064, 68372e191eba620a431cfff226026ac3
0, 3, 3, 1, 152064, de7fd274460e36b983fe93acc208d72f
0, 4, 4, 1, 152064, afbd36c61bab65b98ff9acf08e215721
0, 5, 5, 1, 152064, e1e9fc2ab4e7a187a8d8d84aae48d6b9
0, 6, 6, 1, 152064, 11d95de6a9cc5e00511e99534779faac
0, 7, 7, 1, 152064, cd2f5539fdfc2d8eefe6b6da28c13398
0, 8, 8, 1, 152064, a8b3aeed41da7aeb8d5b962ee4a4af93
0, 9, 9, 1, 152064, 4283670bd1c1c506ef18d3dafca22035

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, 8bad76c55b5149169d64ce6512521de6
0, 2, 2, 1, 152064, c1d986e1f9bf46382e598ba289b9bd7c
0, 3, 3, 1, 152064, 86c097ac6069c786023d3561dae68bac
0, 4, 4, 1, 152064, 8c238a2831b8c7c49736b6de6ff76ed8
0, 5, 5, 1, 152064, cb5a038ed0a74a317ee72dae93a7ee3e
0, 6, 6, 1, 152064, f8fe330a257e3e4e4c39c1c12820a654
0, 7, 7, 1, 152064, a73e2fcdcbb9334c0c123f8276a2c881
0, 8, 8, 1, 152064, 24fccece8ee639e4d0e00e4060e1db0c
0, 9, 9, 1, 152064, 46d6e9aad69a39c718c5fd1e41e86e6e

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, f1ce0a5d57a46c9ff1331804b7b03fdb
0, 2, 2, 1, 152064, 0364a085b06bee6b980189cf5378eda9
0, 3, 3, 1, 152064, 4b5358698d734b0ae210909a913d4c1e
0, 4, 4, 1, 152064, dc22565aaceee77b15fd8ab3c84bd5e0
0, 5, 5, 1, 152064, 5f6340b656536292b46ba9a647aeb6e4
0, 6, 6, 1, 152064, b7d4bce9a04b2a6caa45801be15e331e
0, 7, 7, 1, 152064, 534c851cfe59ffc047815ece98d8cede
0, 8, 8, 1, 152064, 786b0e1564d5c71aabfc2dd528cff4e7
0, 9, 9, 1, 152064, cac0366209cf471bb7cc3e64966cbbd4

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, 45d9ca07ed04210b1ebc743169bc8ec4
0, 2, 2, 1, 152064, 5b646cc309a711f1d8814f925002d8c4
0, 3, 3, 1, 152064, 34db8db727fa1ded0a55cc7cf85be249
0, 4, 4, 1, 152064, 54173d08afe6369b16a9c0c9cc6ce04d
0, 5, 5, 1, 152064, 76275b0a478cdb3c1fb527ebbce023c3
0, 6, 6, 1, 152064, e7643cdf0c42f2af700d8730bfc1a453
0, 7, 7, 1, 152064, 6e53097e56f680cb658d63100e7736f7
0, 8, 8, 1, 152064, 1a407c3c8ea1d5245ae68c5ce7de70e1
0, 9, 9, 1, 152064, 6cbca24912cadf09b20be74f14e359c9

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, f719d0be18d16a448b4e7da3e2d9bf28
0, 2, 2, 1, 152064, 83ee8ebc0ca796782a2376a76f2ffc26
0, 3, 3, 1, 152064, 7cf5afdbc229e1af50a5377cfc23d831
0, 4, 4, 1, 152064, 44244e896e0362f6376ba5afa563ba8b
0, 5, 5, 1, 152064, df5f518d44eb6cb91b2df5a30d27ef82
0, 6, 6, 1, 152064, 43cc3f151b8337aca7ee659c8abeb783
0, 7, 7, 1, 152064, 4e89573470d9b97464e10806fc81aa8b
0, 8, 8, 1, 152064, 62e0ba70f07ece8d85372f0a42e83a9a
0, 9, 9, 1, 152064, 45ac2928acb11326f6c4a21401f3609c

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 96, 52def242c36123e5a8f5f53d6a971399
0, 1, 1, 1, 96, 79c93360fbd47179400414bbfee0901c
0, 2, 2, 1, 96, c3b1947c79537baa7838905276276a91
0, 3, 3, 1, 96, 20f35e501bdee0bc63e87b9240265c25
0, 4, 4, 1, 96, 5e8f1c464bafd54833c51860906b5368
0, 5, 5, 1, 96, f57b592600dfc99e634a083278af769a
0, 6, 6, 1, 96, 7b02191f85590cbad3f148c7b92d6436
0, 7, 7, 1, 96, b0a1c9870447a1744f64cd4087ef55ee
0, 8, 8, 1, 96, c82712b1ba7a95efb67cbdde0ad708b6
0, 9, 9, 1, 96, 89f4539f8d7a7b45a91fd2f46335988e

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 120, ea3e0f807304b0eb2d3e329b0124f75c
0, 1, 1, 1, 120, 8d13cf682d63e7eb13094f55d67fc458
0, 2, 2, 1, 120, e729cc6c3684c94a8f6118c618efc3ea
0, 3, 3, 1, 120, ac43a0ace8e4112e877c2491ecc14fb5
0, 4, 4, 1, 120, 53695f90b88d8e8cb838f0faec3238d3
0, 5, 5, 1, 120, 40afd1c4dfd4a2e3b31631c46d252bcc
0, 6, 6, 1, 120, 2b656f76f2e84d2f82d9bda2b5be94d3
0, 7, 7, 1, 120, b22f004d678d047bc401be5e040cf883
0, 8, 8, 1, 120, 57c840319abfb9c31013fbde54de3fb0
0, 9, 9, 1, 120, 0f3dfc156216d7cfb6fd1d8c77dadab9

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 192, 0553e56a9d89aea496421885aab491f5
0, 1, 1, 1, 192, b2a14cf676f7ebf3c50450050f76ad16
0, 2, 2, 1, 192, a308d981e09b50571fb0c8ebdcefe505
0, 3, 3, 1, 192, d592ec625a0ac0373e82610c3eed9864
0, 4, 4, 1, 192, acd19642455e643023b4fb882c3891ba
0, 5, 5, 1, 192, 5af5390fd8c29b795e0ddf83f3f34284
0, 6, 6, 1, 192, 473505aa2a76231725cf2107d6c9dbef
0, 7, 7, 1, 192, 84860db6887e320f2d64f80cf0032e57
0, 8, 8, 1, 192, 408e9cf60e99ae99d204ff08f3196d1a
0, 9, 9, 1, 192, d8af96b79258f9382e911ed38340bdf5

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 216, 4c41f93b1b280b37bc77d7047435eaa4
0, 1, 1, 1, 216, c9c80fdba2ebc2b8c3490ae35e34f84f
0, 2, 2, 1, 216, 089d86acb3263fa5ef4f591a7f44556d
0, 3, 3, 1, 216, 938fca6d93b83484144f5054e4838a41
0, 4, 4, 1, 216, e0592e2ac9f5e09525ce0d3904cadf47
0, 5, 5, 1, 216, ea43ff5d1330986e60c08567262ea764
0, 6, 6, 1, 216, 08b40fe109ee90188f1cba9bbb1b376e
0, 7, 7, 1, 216, b067068a2a7e36d5c5b5b405a1e73a18
0, 8, 8, 1, 216, 9cf2d350296288803434b7451bd2be85
0, 9, 9, 1, 216, 3c785e21dc228d6396738fbfcb470289

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 384, f92a7777fd69aa2f2914d9a41c4828ba
0, 1, 1, 1, 384, 62e1cc73487d2249a88a60e35a22d9c7
0, 2, 2, 1, 384, aa2619b605cb65eda15fdd99d5775550
0, 3, 3, 1, 384, e6f0a491c543b835d0cefe5ca62c3dbe
0, 4, 4, 1, 384, 361be1a06913c398f09494ca1b2d288f
0, 5, 5, 1, 384, 0497bf849a973357c0ccb8d43f5bd8b4
0, 6, 6, 1, 384, 5ac6ac523147c409dd00820622161dd7
0, 7, 7, 1, 384, 7d07245574a46c524360f09be29a5f19
0, 8, 8, 1, 384, fcfa7fbcaf42f81e4e34a4ee5a029ca1
0, 9, 9, 1, 384, 336e3fe4f15d3d6c82d82b1855dcfeb4

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 408, f3f2cd8f157466ff23dace85d77367ce
0, 1, 1, 1, 408, 639d9b70a14062e95559c12d2b597f91
0, 2, 2, 1, 408, b2ee07a6656af583f19593229fa11848
0, 3, 3, 1, 408, 74e3b5ab4c798a0afe745694e871bbd5
0, 4, 4, 1, 408, 35f1c30d0f8678f319a392a6c53b5989
0, 5, 5, 1, 408, 07e2b4c0b92a394bfb11124fe80476f0
0, 6, 6, 1, 408, 7864bd20dfc5280e5f027d67ea22bf30
0, 7, 7, 1, 408, 10a2925a7b91dfa9b82de76069388fd4
0, 8, 8, 1, 408, 79cc7f7a149e8d6e04e065f75e63733c
0, 9, 9, 1, 408, 6453d10d97532d9bb03f7c06cba9fca0

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 768, 764bd02b781a38c621a109c12f3d9393
0, 1, 1, 1, 768, 79496bd2b9212026af816b3b7a0587d5
0, 2, 2, 1, 768, 2a3afd47ba3d075033fd94d5c3746c45
0, 3, 3, 1, 768, fca00cad8d37a6646337baebadd0ca31
0, 4, 4, 1, 768, aca376fb3f8a5ef670ecc2430037262a
0, 5, 5, 1, 768, 7e6c8d96d1e24855c3e380f1bf2ce02c
0, 6, 6, 1, 768, 09e051241972969d439f27f324d78490
0, 7, 7, 1, 768, 2566b2a425caaba41305bf04ff10ea01
0, 8, 8, 1, 768, db3995bedee42ada1b4ee63c339daf1b
0, 9, 9, 1, 768, b00b8f1bf4fd907f0487738f5b5442c6

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 792, df20e8df89449fe50bb610e95a449a95
0, 1, 1, 1, 792, 18f1a66d463274d1b0489f3a50e86857
0, 2, 2, 1, 792, b0cc102875a94c9a92e53826617adbe9
0, 3, 3, 1, 792, dfece7c17b4b149283ef51bdc1bd440e
0, 4, 4, 1, 792, 6e346884f67be259fcabe493109cb63c
0, 5, 5, 1, 792, 6d282127311eb2d958377490d7cb77f0
0, 6, 6, 1, 792, 637ac8b14ca5ddbaf7b8910406c3cd08
0, 7, 7, 1, 792, e7980f3fcb36969da0d218c4389fa9e8
0, 8, 8, 1, 792, 730a1c95b9fb165f6e1a2f33a0d25de0
0, 9, 9, 1, 792, 7bd8424d0783b1c8ad617e17408371bb

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 120, e1e66a88615da98523ef887f1463fc42
0, 1, 1, 1, 120, 549842fa98c8faf572882d38b0aae390
0, 2, 2, 1, 120, 17ee85785517705fdc78c6122a4b2548
0, 3, 3, 1, 120, 1143391d419dac30a6c11f366157c974
0, 4, 4, 1, 120, b62d2a962c4c36809ef75a610106715c
0, 5, 5, 1, 120, e6f143ca33fbc0e776bb149950cdedff
0, 6, 6, 1, 120, 01716a1077ec66df00474fd4510d2789
0, 7, 7, 1, 120, 8cb5b6a865fa2cbb15f0d7736fda88a6
0, 8, 8, 1, 120, 0fb9fd883e895a540fe1704dddbbab04
0, 9, 9, 1, 120, 150a3b99aa24ef102c92f87c8adb4386

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 150, 083d638f2e147295d817bb14fff5e4f4
0, 1, 1, 1, 150, 6dbdc445b6fd6bb99f2025cc2a40977e
0, 2, 2, 1, 150, 41714089383b181d64fbfa7de5904608
0, 3, 3, 1, 150, 11fdb8465e1599f7a9227706646d2cba
0, 4, 4, 1, 150, 907876b3342a10040db0851a936af4e3
0, 5, 5, 1, 150, e7b18d47d06b25de205d873d3d941640
0, 6, 6, 1, 150, 523ce7413c8da7f6a657a9b661f36c44
0, 7, 7, 1, 150, 23caff863af875c66c903662a3e1e6a1
0, 8, 8, 1, 150, ed4cc5557203e5b7a119112ee9ceb00b
0, 9, 9, 1, 150, 4bb78a996be3188888d1c60e11a08e1b

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 240, fab07d6209d2413e0a434e1aaaa12154
0, 1, 1, 1, 240, f9ffffdb96f98527ba2e553d1265edbb
0, 2, 2, 1, 240, 56a992264cf7da2b23dd97435e9d0365
0, 3, 3, 1, 240, b1db980423d8004bd45a789b02b92a65
0, 4, 4, 1, 240, b29496aedc7026566367b634f55ebb28
0, 5, 5, 1, 240, 2bc9def672da4a2fc17cbd669e2b8081
0, 6, 6, 1, 240, 8c54721514cdf577a52a8668b9135f13
0, 7, 7, 1, 240, 2efab81d5e039d82b3bc7b0303b022c4
0, 8, 8, 1, 240, bd0f42b91b5d126fd0baec765b1096ad
0, 9, 9, 1, 240, c6bfea2735a629167bc6a7a7c76eb7f3

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 270, 0e9182e214aae732d94d007e5fe44888
0, 1, 1, 1, 270, 2630e2674b5611d68218fddac08815e2
0, 2, 2, 1, 270, d5cdd7d6a3de17939f60bb60ef6877da
0, 3, 3, 1, 270, 29d1961096061029e78963fa82581eca
0, 4, 4, 1, 270, 5c2629f8aa59757f6b4aafa9f6cbcba1
0, 5, 5, 1, 270, 1f1a8b61e4fbd6222ddf42e9d0a07032
0, 6, 6, 1, 270, cfb9771190ac2d0129907102d6abb63f
0, 7, 7, 1, 270, cd98dd856ba573a26a943cbe53221f26
0, 8, 8, 1, 270, ca13c161f067c4a4ce22bd58a2aca55b
0, 9, 9, 1, 270, de4bd1a474a76a35b796a5fc45b4f893

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 480, 622e6407a051ea08706394d03330ffbf
0, 1, 1, 1, 480, 1841a0daf7c3ef7be94e01fdb1d3968a
0, 2, 2, 1, 480, 37790e6cb2415f7add0ac5d3ab354755
0, 3, 3, 1, 480, 91485880e17c292096a7335566d3648f
0, 4, 4, 1, 480, eb6f74983d5fd13d6bd90afbce8836e1
0, 5, 5, 1, 480, 0069ab5ff7f0d4d601f7d0f9b7a08338
0, 6, 6, 1, 480, dbf04254765f7497070387e8c34895c6
0, 7, 7, 1, 480, 410a9b2d9855b2c29618070994adae96
0, 8, 8, 1, 480, 7e7f34effd90209f29f1b9ae01488b3b
0, 9, 9, 1, 480, 471530f74082c01c9b0f1fcf3d240d77

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 510, bfeeaf51f972fd0dfe9ee757083cbb54
0, 1, 1, 1, 510, 10cd4ed6d762004846412d9cd0caa407
0, 2, 2, 1, 510, 04cca4008d656ed180de88dd2ddb4f21
0, 3, 3, 1, 510, ec777e377836895748c06849fa35ed2d
0, 4, 4, 1, 510, b55633d0f9239dff3e45a4abce4a35a7
0, 5, 5, 1, 510, 063c3ab4b4c599942c3a8a5b7bfe5029
0, 6, 6, 1, 510, 07b920169d32b5fc51d5b9ae16fef5bf
0, 7, 7, 1, 510, 8d49e727db9d3072b5ab7bab2133d9be
0, 8, 8, 1, 510, 17441437203447e946a57d2f96966332
0, 9, 9, 1, 510, 5d3f14af0e5cd81d0c7d2059f13efa5a

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save