Commit 72ca830f authored by Ronald S. Bultje's avatar Ronald S. Bultje Committed by Luca Barbato

lavc: VP9 decoder

Originally written by Ronald S. Bultje <rsbultje@gmail.com> and
Clément Bœsch <u@pkh.me>

Further contributions by:
Anton Khirnov <anton@khirnov.net>
Diego Biurrun <diego@biurrun.de>
Luca Barbato <lu_zero@gentoo.org>
Martin Storsjö <martin@martin.st>
Signed-off-by: 's avatarLuca Barbato <lu_zero@gentoo.org>
Signed-off-by: 's avatarAnton Khirnov <anton@khirnov.net>
parent 458446ac
......@@ -47,6 +47,7 @@ version 10:
- Live HDS muxer
- setsar/setdar filters now support variables in ratio expressions
- dar variable in the scale filter now returns the actual DAR (i.e. a * sar)
- VP9 decoder
version 9:
......
......@@ -1702,6 +1702,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"
......
......@@ -594,6 +594,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 planar RGB @tab @tab X
@tab fourcc: 8BPS
@item Q-team QPEG @tab @tab X
......
......@@ -392,6 +392,8 @@ 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 vp9data.o vp9dsp.o \
vp9block.o vp9prob.o vp9mvs.o vp56rac.o
OBJS-$(CONFIG_VQA_DECODER) += vqavideo.o
OBJS-$(CONFIG_WAVPACK_DECODER) += wavpack.o
OBJS-$(CONFIG_WEBP_DECODER) += webp.o
......
......@@ -257,6 +257,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);
......
......@@ -27,7 +27,7 @@
*/
#define LIBAVCODEC_VERSION_MAJOR 55
#define LIBAVCODEC_VERSION_MINOR 27
#define LIBAVCODEC_VERSION_MINOR 28
#define LIBAVCODEC_VERSION_MICRO 0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/*
* Copyright (C) 2013 Ronald S. Bultje <rsbultje gmail com>
* Copyright (C) 2013 Clément Bœsch <u pkh me>
*
* This file is part of Libav.
*
* Libav 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.
*
* Libav 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 Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_VP9DATA_H
#define AVCODEC_VP9DATA_H
#include <stdint.h>
#include "vp9.h"
extern const int8_t ff_vp9_partition_tree[3][2];
extern const uint8_t ff_vp9_default_kf_partition_probs[4][4][3];
extern const int8_t ff_vp9_segmentation_tree[7][2];
extern const int8_t ff_vp9_intramode_tree[9][2];
extern const uint8_t ff_vp9_default_kf_ymode_probs[10][10][9];
extern const uint8_t ff_vp9_default_kf_uvmode_probs[10][9];
extern const int8_t ff_vp9_inter_mode_tree[3][2];
extern const int8_t ff_vp9_filter_tree[2][2];
extern const enum FilterMode ff_vp9_filter_lut[3];
extern const int16_t ff_vp9_dc_qlookup[256];
extern const int16_t ff_vp9_ac_qlookup[256];
extern const enum TxfmType ff_vp9_intra_txfm_type[14];
extern const int16_t ff_vp9_default_scan_4x4[16];
extern const int16_t ff_vp9_col_scan_4x4[16];
extern const int16_t ff_vp9_row_scan_4x4[16];
extern const int16_t ff_vp9_default_scan_8x8[64];
extern const int16_t ff_vp9_col_scan_8x8[64];
extern const int16_t ff_vp9_row_scan_8x8[64];
extern const int16_t ff_vp9_default_scan_16x16[256];
extern const int16_t ff_vp9_col_scan_16x16[256];
extern const int16_t ff_vp9_row_scan_16x16[256];
extern const int16_t ff_vp9_default_scan_32x32[1024];
extern const int16_t *ff_vp9_scans[5][4];
extern const int16_t ff_vp9_default_scan_4x4_nb[16][2];
extern const int16_t ff_vp9_col_scan_4x4_nb[16][2];
extern const int16_t ff_vp9_row_scan_4x4_nb[16][2];
extern const int16_t ff_vp9_default_scan_8x8_nb[64][2];
extern const int16_t ff_vp9_col_scan_8x8_nb[64][2];
extern const int16_t ff_vp9_row_scan_8x8_nb[64][2];
extern const int16_t ff_vp9_default_scan_16x16_nb[256][2];
extern const int16_t ff_vp9_col_scan_16x16_nb[256][2];
extern const int16_t ff_vp9_row_scan_16x16_nb[256][2];
extern const int16_t ff_vp9_default_scan_32x32_nb[1024][2];
extern const int16_t (*ff_vp9_scans_nb[5][4])[2];
extern const uint8_t ff_vp9_model_pareto8[256][8];
extern const ProbContext ff_vp9_default_probs;
extern const uint8_t ff_vp9_default_coef_probs[4][2][2][6][6][3];
extern const int8_t ff_vp9_mv_joint_tree[3][2];
extern const int8_t ff_vp9_mv_class_tree[10][2];
extern const int8_t ff_vp9_mv_fp_tree[3][2];
#endif /* AVCODEC_VP9DATA_H */
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -35,6 +35,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_XMM_CLOBBER_TEST) += x86/w64xmmtest.o
MMX-OBJS-$(CONFIG_DSPUTIL) += x86/dsputil_mmx.o \
......@@ -90,3 +91,4 @@ YASM-OBJS-$(CONFIG_VP3DSP) += x86/vp3dsp.o
YASM-OBJS-$(CONFIG_VP6_DECODER) += x86/vp6dsp.o
YASM-OBJS-$(CONFIG_VP8_DECODER) += x86/vp8dsp.o \
x86/vp8dsp_loopfilter.o
YASM-OBJS-$(CONFIG_VP9_DECODER) += x86/vp9dsp.o
;******************************************************************************
;* VP9 SIMD optimizations
;*
;* Copyright (c) 2013 Ronald S. Bultje <rsbultje gmail com>
;*
;* This file is part of Libav.
;*
;* Libav 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.
;*
;* Libav 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 Libav; 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, src, dstride, 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, src, dstride, sstride, h, filtery, src4, sstride3
%else
cglobal %1_8tap_1d_v_ %+ %%px, 4, 7, 11, dst, src, dstride, 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, src, dstride, sstride, h, dstride3, sstride3
lea sstride3q, [sstrideq*3]
lea dstride3q, [dstrideq*3]
%else
cglobal %1%2, 5, 5, 4, dst, src, dstride, 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
This diff is collapsed.
......@@ -52,3 +52,34 @@ $(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)
#tb 0: 1/1000
0, 0, 0, 0, 152064, c3fbb7abbdb5bd4ed4a7e34768c17df1
0, 33, 33, 0, 152064, 08203c2595bdb2d58ead6f921345d699
#tb 0: 1/1000
0, 0, 0, 0, 152064, f041b870cf9236d5f22e2b08a77d5958
0, 33, 33, 0, 152064, cbdb7526986ae15592891488c9afc84c
#tb 0: 1/1000
0, 0, 0, 0, 152064, 98048cfdb4af5059f4085c5acc94ef8f
0, 33, 33, 0, 152064, 8160183e1eed1d0af4427be216b8b9f7
#tb 0: 1/1000
0, 0, 0, 0, 152064, 15c548208f5eda243a151a42f4d64855
0, 33, 33, 0, 152064, e96d463dc8e9b27b1c2ec40f77eee6ef
#tb 0: 1/1000
0, 0, 0, 0, 152064, 928c64a0747ac57ab50c1520d694fea7
0, 33, 33, 0, 152064, a6f6daa293231e95ef30ed168f582c84
#tb 0: 1/1000
0, 0, 0, 0, 152064, 082460718b7d7046c8fb23184b7f71ca
0, 33, 33, 0, 152064, 4a41aad51c40a92df72333e13f47d3fe
#tb 0: 1/1000
0, 0, 0, 0, 152064, cfca1bed96ff62a69b2d841fda01c6b9
0, 33, 33, 0, 152064, 9b4d61f1b998745c108f8eb67925e03d
#tb 0: 1/1000
0, 0, 0, 0, 152064, 6f5122064bead9d9882bec2698a6ed9c
0, 33, 33, 0, 152064, 50dae67d2f57a76eece210dee8b6df9e
#tb 0: 1/1000
0, 0, 0, 0, 152064, eb3d6985fcda5d93dd62d53354e8a093
0, 33, 33, 0, 152064, 5b1f5b7780b4cafe1f75e56a0b526643
#tb 0: 1/1000
0, 0, 0, 0, 152064, d7ccaf28c59875fe91983def5490d2b1
0, 33, 33, 0, 152064, bd98fe9492054826748de840b4495309
#tb 0: 1/1000
0, 0, 0, 0, 152064, 20dda6231f9801c9c237c6d09d9939b6
0, 33, 33, 0, 152064, 23c91e93807fb9a4ed5bd5bdd449d99f
#tb 0: 1/1000
0, 0, 0, 0, 152064, 960833315ebcdee97f46c4d98d0f3fef
0, 33, 33, 0, 152064, eec40507d17b64b7895a61cb87b2096a
#tb 0: 1/1000
0, 0, 0, 0, 152064, 6533224d3b6ba1ec0dd973bbe56c6349
0, 33, 33, 0, 152064, 12ceadc6d28327a24a75f8c40b6084d1
#tb 0: 1/1000
0, 0, 0, 0, 152064, 7268de6756014f79a56dcf010c52a97f
0, 33, 33, 0, 152064, 9e39e9b0e2295b8460dfa05f44762771
#tb 0: 1/1000
0, 0, 0, 0, 152064, 57e9e333c641fa952f7485b788df225a
0, 33, 33, 0, 152064, 551f0cea83dcdf4540c3983736757874
#tb 0: 1/1000
0, 0, 0, 0, 152064, 17a0a2842856b9e89aede237648d5dda
0, 33, 33, 0, 152064, c9fcade888a38621bebe3d4b41664245
#tb 0: 1/1000
0, 0, 0, 0, 152064, 6cc2089e9a3d352fe10b59ccd935c677
0, 33, 33, 0, 152064, d165bf7b9cb901e121a65038758d8613
#tb 0: 1/1000
0, 0, 0, 0, 152064, bc80511c83162c09661f155cd29f6dd8
0, 33, 33, 0, 152064, a62f1cbdb3f86d2fb4c880cfd917def5
#tb 0: 1/1000
0, 0, 0, 0, 152064, b2d350f6faa41cb50c2e8a9907d0f4a5
0, 33, 33, 0, 152064, 39b4380d16bc8e093dd4dba475175fb3
#tb 0: 1/1000
0, 0, 0, 0, 152064, 441e09be3c15fcb240afd74bb7a10a72
0, 33, 33, 0, 152064, 32ae5dac876ca5d5ae6ab7c74f4dc25d
#tb 0: 1/1000
0, 0, 0, 0, 152064, 7786eb9944dba0553e129133523a98c1
0, 33, 33, 0, 152064, 206d888f8453427f10a40aa8bf5f6df0
#tb 0: 1/1000
0, 0, 0, 0, 152064, aab95e195be71feca050a839d7b3154d
0, 33, 33, 0, 152064, 02a05d699bbbdc477e34bb0dad9f0391
#tb 0: 1/1000
0, 0, 0, 0, 152064, 41f853c3ee2d4611b645cc643d82e287
0, 33, 33, 0, 152064, 1c240c653110ff8609ca0f0287a6496d
#tb 0: 1/1000
0, 0, 0, 0, 152064, bc5b07369df50c8f97ce1a377fe513cf
0, 33, 33, 0, 152064, ce62ddb4f3e305d0f8587ae8bb44cc79
#tb 0: 1/1000
0, 0, 0, 0, 152064, 982d54041221c977b6f0e37a9236cc76
0, 33, 33, 0, 152064, 57631e7f13f645c834e2944ebfd6d40e
#tb 0: 1/1000
0, 0, 0, 0, 152064, b0fb55f3f2f56b3d27038e83c10123ce
0, 33, 33, 0, 152064, 9fcac3becdcc2d30d778a55eca4c2018
#tb 0: 1/1000
0, 0, 0, 0, 152064, 4f645e0f354da77b9e2f2a6753c361da
0, 33, 33, 0, 152064, b7542998ec298273ca662bc9b658d10e
#tb 0: 1/1000
0, 0, 0, 0, 152064, 6edc96a3747cad43828397045764206e
0, 33, 33, 0, 152064, 5fbc65d20fdca1abd69079851ce676d3
#tb 0: 1/1000
0, 0, 0, 0, 152064, 5db3e910e70da38bb91d01d73acc33dd
0, 33, 33, 0, 152064, b920ee7f7e61b7fdf9f44b1f738d0292
#tb 0: 1/1000
0, 0, 0, 0, 152064, 3cb3e310be5305077efa6216f6f10654
0, 33, 33, 0, 152064, 692d3e098af5978fe1a898ebc1a66a7a
#tb 0: 1/1000
0, 0, 0, 0, 152064, e3b3cea66ea38c5dfba1aa73bb4c611d
0, 33, 33, 0, 152064, 42bb3e54b19c3f4c4f7ee3a6ba012e19
#tb 0: 1/1000
0, 0, 0, 0, 152064, 2523e9ecfd3781eafcd7da192dc105e9
0, 33, 33, 0, 152064, 6d5feea012b9a1f51fc643633e728764
#tb 0: 1/1000
0, 0, 0, 0, 152064, 0a0305eba36500ebf6cc6cc0f01f5a3b
0, 33, 33, 0, 152064, 2c76bcd6763467f9057a726fbcf50ab1
#tb 0: 1/1000
0, 0, 0, 0, 152064, c68433e0e94047c220be9b629334f744
0, 33, 33, 0, 152064, fcfa4dff7a39bc9c5e315849ecbb46ea
#tb 0: 1/1000
0, 0, 0, 0, 152064, ad9dc2f912c137b014a33e2792c88a25
0, 33, 33, 0, 152064, 11221ee4ea5c776f43af68756682cd5a
#tb 0: 1/1000
0, 0, 0, 0, 152064, 75031f898cccf303a64ab46b1f815389
0, 33, 33, 0, 152064, a4fc864e7fbc470dfcab6207e0eea152
#tb 0: 1/1000
0, 0, 0, 0, 152064, c7824af009fde6cafdd8d39fae6bb6cf
0, 33, 33, 0, 152064, 516a82d5fc4dfa3daf713ed2ec36041b
#tb 0: 1/1000
0, 0, 0, 0, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 33, 33, 0, 152064, fb23e0bc64728a492a33d985032f21b8
#tb 0: 1/1000
0, 0, 0, 0, 152064, 8347bfb891317e89ef66781d6c28e24f
0, 33, 33, 0, 152064, a5722f824d32deac042513a1a7dcdcd0
#tb 0: 1/1000
0, 0, 0, 0, 152064, 018968f97fac3bdff146cf22c1da5ef0
0, 33, 33, 0, 152064, ca8b09b01e5132183395e238f1c7901e
#tb 0: 1/1000
0, 0, 0, 0, 152064, 792660f6589ad5340be4bd0554435866
0, 33, 33, 0, 152064, 68c84c8a15d679e0a73678b93215c62c
#tb 0: 1/1000
0, 0, 0, 0, 152064, a456bdfc6c1c07b4cb3a3848843743b9
0, 33, 33, 0, 152064, fe41a12b8cb6bc5667ba2179e076f3b0
#tb 0: 1/1000
0, 0, 0, 0, 152064, f016dd8431694d989700fb1ba71a5b2d
0, 33, 33, 0, 152064, e89c3c5b935157b40f2fb0ab92415828
#tb 0: 1/1000
0, 0, 0, 0, 152064, 7b8ab82625f3006bac89d4fb5197e71c
0, 33, 33, 0, 152064, 18bd3716045563dfba2c72b640b3274b
#tb 0: 1/1000
0, 0, 0, 0, 152064, 66fde04d8320c750e56406feefd29979
0, 33, 33, 0, 152064, f9d01d8fc1722ec345e624e14b404215
#tb 0: 1/1000
0, 0, 0, 0, 152064, cc97597b015896d73f3e60e7ae44c4da
0, 33, 33, 0, 152064, fea98bc508f92135641ab99762444b14
#tb 0: 1/1000
0, 0, 0, 0, 152064, 79ed95c741178bb3c0954f1f6f8e21a3
0, 33, 33, 0, 152064, f02a06a5e2b5b7619c9a52c5bea0564d
#tb 0: 1/1000
0, 0, 0, 0, 152064, 9b98e948b8c2a822f21bd8419e6f4410
0, 33, 33, 0, 152064, 491382d68c16c2a3c6f1746598bc4a97
#tb 0: 1/1000
0, 0, 0, 0, 152064, f0f095b0edae7262f44d7ed7ef84ded4
0, 33, 33, 0, 152064, 0e833889ccac81d60251007d1baf6500
#tb 0: 1/1000
0, 0, 0, 0, 152064, 6c1b7b7827617fb9b8417aca2cfdbcaa
0, 33, 33, 0, 152064, 4c1fc8a89297fdcf79f0faabd42b8684
#tb 0: 1/1000
0, 0, 0, 0, 152064, ca6142db68463487bc28c888ab38476c
0, 33, 33, 0, 152064, 02a71153ec70f569524c3d814cb62f86
#tb 0: 1/1000
0, 0, 0, 0, 152064, eece2627df1ddf0872256eb92352e179
0, 33, 33, 0, 152064, 0ee9f221246ad747250e4b5e8ba586e2
#tb 0: 1/1000
0, 0, 0, 0, 152064, 7290039d974c4e50db9d69f9864bcdbe
0, 33, 33, 0, 152064, 264765de9d02503038a4da54133b9f85
#tb 0: 1/1000
0, 0, 0, 0, 152064, 917af24da66f143a56a01eb2c2254285
0, 33, 33, 0, 152064, 45a05d3bc644420519619e4115662a70
#tb 0: 1/1000
0, 0, 0, 0, 152064, 6fea2820bb10a9dec9add4d2452b01f5
0, 33, 33, 0, 152064, 74675169a4bfc2ff5463c4db5d85a79f
#tb 0: 1/1000
0, 0, 0, 0, 152064, 11e5d196f6537fb7d85988d90195e556
0, 33, 33, 0, 152064, 8536106795f7c93c5a43a11493527469
#tb 0: 1/1000
0, 0, 0, 0, 152064, 40839b7a3a40ec10f96b8a75224f646d
0, 33, 33, 0, 152064, 11408dd73e8c45ddaab99f5c9650102b
#tb 0: 1/1000
0, 0, 0, 0, 152064, d0e9fa03dd48da4592ebaadb4e3794e0
0, 33, 33, 0, 152064, 5172e29b1e04cd543833d6a68aab297c
#tb 0: 1/1000
0, 0, 0, 0, 152064, bef4a27d460e7697e038fe6f1c8bd597
0, 33, 33, 0, 152064, 124674686cafc5f2ff5bc7ea412b8f3b
#tb 0: 1/1000
0, 0, 0, 0, 152064, ae9d99e9d16ef20073300559566844ae
0, 33, 33, 0, 152064, da9405e5a6bfe4ed18d927ba2004008e
#tb 0: 1/1000
0, 0, 0, 0, 152064, 9e66bb8e1b5e206ea4afe4bf2d335ac5
0, 33, 33, 0, 152064, 092b74c905c12c1e87e90f5a79857736
#tb 0: 1/1000
0, 0, 0, 0, 152064, d062dc6be246c8042744018765ef50a8
0, 33, 33, 0, 152064, 45fd9cbacb6a91060a7e49a58a85869d
#tb 0: 1/1000
0, 0, 0, 0, 152064, 62f7e42fe653e81c5a65a25389e045b5
0, 33, 33, 0, 152064, cb0cdd0b25689e0a43328550011d960d
#tb 0: 1/1000
0, 0, 0, 0, 152064, 8467643dceff827e04acd82eeff1d1b0
0, 33, 33, 0, 152064, c786f49d66f4dfd685dea9605821a19f
#tb 0: 1/1000
0, 0, 0, 0, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 33, 33, 0, 152064, aa20a75be3a316193496706c9f760d08
0, 66, 66, 0, 152064, 95567be97a64d3c9efe45f2524116a2e
0, 100, 100, 0, 152064, 219e86cd6b3cca312856eead21776b1c
0, 133, 133, 0, 152064, 4a67fd359ca362398e97c15eb018a2bb
0, 166, 166, 0, 152064, 9916d4e359274d690827f0eb22547423
0, 200, 200, 0, 152064, a07785b52561150c48f1a8eff89d5d75
0, 233, 233, 0, 152064, a3382a92982953dfa20018e5ac975b51
0, 266, 266, 0, 152064, 911836989ca7b148438aa3ec7fc7e303
0, 300, 300, 0, 152064, 5627b981e3fc9e4401d35d3a5ab25917
#tb 0: 1/1000
0, 0, 0, 0, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 33, 33, 0, 152064, cd94572239817ae7c9b07de739c3272b
0, 66, 66, 0, 152064, 383cf752d457e122b5ff49d08960208e
0, 100, 100, 0, 152064, 1c0a6ec9cd3ce29b8b004e7526f1b07e
0, 133, 133, 0, 152064, 91c42a8a108d67947cabfc2a5a80df66
0, 166, 166, 0, 152064, 08c57fc1f3fec0305883315a66c714d1
0, 200, 200, 0, 152064, 70cb8d8dc83eac82f2d3c4b0376bb1aa
0, 233, 233, 0, 152064, ffd62a9ef829ec81f0f74f740488a41f
0, 266, 266, 0, 152064, bab0aa23b5854e2a70926046e4618710
0, 300, 300, 0, 152064, fec456f38f2a43661e786a8d5f67ed15
#tb 0: 1/1000
0, 0, 0, 0, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 33, 33, 0, 152064, 0d487a146393a0b8b84b4be1b371b507
0, 66, 66, 0, 152064, 68372e191eba620a431cfff226026ac3
0, 100, 100, 0, 152064, de7fd274460e36b983fe93acc208d72f
0, 133, 133, 0, 152064, afbd36c61bab65b98ff9acf08e215721
0, 166, 166, 0, 152064, e1e9fc2ab4e7a187a8d8d84aae48d6b9
0, 200, 200, 0, 152064, 11d95de6a9cc5e00511e99534779faac
0, 233, 233, 0, 152064, cd2f5539fdfc2d8eefe6b6da28c13398
0, 266, 266, 0, 152064, a8b3aeed41da7aeb8d5b962ee4a4af93
0, 300, 300, 0, 152064, 4283670bd1c1c506ef18d3dafca22035
#tb 0: 1/1000
0, 0, 0, 0, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 33, 33, 0, 152064, 8bad76c55b5149169d64ce6512521de6
0, 66, 66, 0, 152064, c1d986e1f9bf46382e598ba289b9bd7c
0, 100, 100, 0, 152064, 86c097ac6069c786023d3561dae68bac
0, 133, 133, 0, 152064, 8c238a2831b8c7c49736b6de6ff76ed8
0, 166, 166, 0, 152064, cb5a038ed0a74a317ee72dae93a7ee3e
0, 200, 200, 0, 152064, f8fe330a257e3e4e4c39c1c12820a654
0, 233, 233, 0, 152064, a73e2fcdcbb9334c0c123f8276a2c881
0, 266, 266, 0, 152064, 24fccece8ee639e4d0e00e4060e1db0c
0, 300, 300, 0, 152064, 46d6e9aad69a39c718c5fd1e41e86e6e
#tb 0: 1/1000
0, 0, 0, 0, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 33, 33, 0, 152064, f1ce0a5d57a46c9ff1331804b7b03fdb
0, 66, 66, 0, 152064, 0364a085b06bee6b980189cf5378eda9
0, 100, 100, 0, 152064, 4b5358698d734b0ae210909a913d4c1e
0, 133, 133, 0, 152064, dc22565aaceee77b15fd8ab3c84bd5e0
0, 166, 166, 0, 152064, 5f6340b656536292b46ba9a647aeb6e4
0, 200, 200, 0, 152064, b7d4bce9a04b2a6caa45801be15e331e
0, 233, 233, 0, 152064, 534c851cfe59ffc047815ece98d8cede
0, 266, 266, 0, 152064, 786b0e1564d5c71aabfc2dd528cff4e7
0, 300, 300, 0, 152064, cac0366209cf471bb7cc3e64966cbbd4
#tb 0: 1/1000
0, 0, 0, 0, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 33, 33, 0, 152064, 45d9ca07ed04210b1ebc743169bc8ec4
0, 66, 66, 0, 152064, 5b646cc309a711f1d8814f925002d8c4
0, 100, 100, 0, 152064, 34db8db727fa1ded0a55cc7cf85be249
0, 133, 133, 0, 152064, 54173d08afe6369b16a9c0c9cc6ce04d
0, 166, 166, 0, 152064, 76275b0a478cdb3c1fb527ebbce023c3
0, 200, 200, 0, 152064, e7643cdf0c42f2af700d8730bfc1a453
0, 233, 233, 0, 152064, 6e53097e56f680cb658d63100e7736f7
0, 266, 266, 0, 152064, 1a407c3c8ea1d5245ae68c5ce7de70e1
0, 300, 300, 0, 152064, 6cbca24912cadf09b20be74f14e359c9
#tb 0: 1/1000
0, 0, 0, 0, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 33, 33, 0, 152064, f719d0be18d16a448b4e7da3e2d9bf28
0, 66, 66, 0, 152064, 83ee8ebc0ca796782a2376a76f2ffc26
0, 100, 100, 0, 152064, 7cf5afdbc229e1af50a5377cfc23d831
0, 133, 133, 0, 152064, 44244e896e0362f6376ba5afa563ba8b
0, 166, 166, 0, 152064, df5f518d44eb6cb91b2df5a30d27ef82
0, 200, 200, 0, 152064, 43cc3f151b8337aca7ee659c8abeb783
0, 233, 233, 0, 152064, 4e89573470d9b97464e10806fc81aa8b
0, 266, 266, 0, 152064, 62e0ba70f07ece8d85372f0a42e83a9a
0, 300, 300, 0, 152064, 45ac2928acb11326f6c4a21401f3609c
#tb 0: 1/1000
0, 0, 0, 0, 96, 52def242c36123e5a8f5f53d6a971399
0, 33, 33, 0, 96, 79c93360fbd47179400414bbfee0901c
0, 66, 66, 0, 96, c3b1947c79537baa7838905276276a91
0, 100, 100, 0, 96, 20f35e501bdee0bc63e87b9240265c25
0, 133, 133, 0, 96, 5e8f1c464bafd54833c51860906b5368
0, 166, 166, 0, 96, f57b592600dfc99e634a083278af769a
0, 200, 200, 0, 96, 7b02191f85590cbad3f148c7b92d6436
0, 233, 233, 0, 96, b0a1c9870447a1744f64cd4087ef55ee
0, 266, 266, 0, 96, c82712b1ba7a95efb67cbdde0ad708b6
0, 300, 300, 0, 96, 89f4539f8d7a7b45a91fd2f46335988e
#tb 0: 1/1000
0, 0, 0, 0, 120, ea3e0f807304b0eb2d3e329b0124f75c
0, 33, 33, 0, 120, 8d13cf682d63e7eb13094f55d67fc458
0, 66, 66, 0, 120, e729cc6c3684c94a8f6118c618efc3ea
0, 100, 100, 0, 120, ac43a0ace8e4112e877c2491ecc14fb5
0, 133, 133, 0, 120, 53695f90b88d8e8cb838f0faec3238d3
0, 166, 166, 0, 120, 40afd1c4dfd4a2e3b31631c46d252bcc
0, 200, 200, 0, 120, 2b656f76f2e84d2f82d9bda2b5be94d3
0, 233, 233, 0, 120, b22f004d678d047bc401be5e040cf883
0, 266, 266, 0, 120, 57c840319abfb9c31013fbde54de3fb0
0, 300, 300, 0, 120, 0f3dfc156216d7cfb6fd1d8c77dadab9
#tb 0: 1/1000
0, 0, 0, 0, 192, 0553e56a9d89aea496421885aab491f5
0, 33, 33, 0, 192, b2a14cf676f7ebf3c50450050f76ad16
0, 66, 66, 0, 192, a308d981e09b50571fb0c8ebdcefe505
0, 100, 100, 0, 192, d592ec625a0ac0373e82610c3eed9864
0, 133, 133, 0, 192, acd19642455e643023b4fb882c3891ba
0, 166, 166, 0, 192, 5af5390fd8c29b795e0ddf83f3f34284
0, 200, 200, 0, 192, 473505aa2a76231725cf2107d6c9dbef
0, 233, 233, 0, 192, 84860db6887e320f2d64f80cf0032e57
0, 266, 266, 0, 192, 408e9cf60e99ae99d204ff08f3196d1a
0, 300, 300, 0, 192, d8af96b79258f9382e911ed38340bdf5
#tb 0: 1/1000
0, 0, 0, 0, 216, 4c41f93b1b280b37bc77d7047435eaa4
0, 33, 33, 0, 216, c9c80fdba2ebc2b8c3490ae35e34f84f
0, 66, 66, 0, 216, 089d86acb3263fa5ef4f591a7f44556d
0, 100, 100, 0, 216, 938fca6d93b83484144f5054e4838a41
0, 133, 133, 0, 216, e0592e2ac9f5e09525ce0d3904cadf47
0, 166, 166, 0, 216, ea43ff5d1330986e60c08567262ea764
0, 200, 200, 0, 216, 08b40fe109ee90188f1cba9bbb1b376e
0, 233, 233, 0, 216, b067068a2a7e36d5c5b5b405a1e73a18
0, 266, 266, 0, 216, 9cf2d350296288803434b7451bd2be85
0, 300, 300, 0, 216, 3c785e21dc228d6396738fbfcb470289
#tb 0: 1/1000
0, 0, 0, 0, 384, f92a7777fd69aa2f2914d9a41c4828ba
0, 33, 33, 0, 384, 62e1cc73487d2249a88a60e35a22d9c7
0, 66, 66, 0, 384, aa2619b605cb65eda15fdd99d5775550
0, 100, 100, 0, 384, e6f0a491c543b835d0cefe5ca62c3dbe
0, 133, 133, 0, 384, 361be1a06913c398f09494ca1b2d288f
0, 166, 166, 0, 384, 0497bf849a973357c0ccb8d43f5bd8b4
0, 200, 200, 0, 384, 5ac6ac523147c409dd00820622161dd7
0, 233, 233, 0, 384, 7d07245574a46c524360f09be29a5f19
0, 266, 266, 0, 384, fcfa7fbcaf42f81e4e34a4ee5a029ca1
0, 300, 300, 0, 384, 336e3fe4f15d3d6c82d82b1855dcfeb4
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment