ELF @@#"GNUoa>(NrWz6nhLinux  { O @@*j`Ta4@)R)! 5 _)@?T* OB @{è_֡53(!DE @R )K!}@  C@{_WO@@C@!@YR r`6R ZRYR(r)r"r* H ) ) )bD9 5"@9BRhHFvRqAT R)ri *i(TR R(r)r BzA@9R(r`RGF42 kIT**h@GBE@*1@@9h7Q5@G RR r!Aq@HTF?q@ T? qTRr ))@hRr*~"Eh@B!RE@1@(R(r!q@!`5@!`5@!5@q#9!@5@iRFr@*~~*7 7*"!XR(r`* (@ W@3:R )2 W@* >@!Rq(Rrh@BE@c*1@*!@ @)@?TODWC_B{AC_  @{_WOD@ R)rRii aR)r8rh@w E@>AqT:A qaT2@BcAR* AR)rR` :A q T*PR(rt"R:A q TAR(r`@`r@9 6XR(r`@yC`h@vAE@?q(Rh@!RE@vAq!TR(rw@@92@?ֈ@@92@?ֵTh@BE@c*1@ _)@?!TOFWE_D{C*_ֈ%R"R:A? q @? qTH  {R(rhhO PR)r @(@(VGR(rI4 8R*h*h.@ )*a@h2 @)@*jbh&iOA{¨_  R(rhh(a?TVR)rjR ,R i)lVR)r i)_*_  {R(rW_@`R(r khO 5@A_R)rq T@9H5(@4uBTh@h@?h@* @?***kbThB (@ K?kTNGN+r^9TR(r4 @*1M9j4 !@9 4*5M95) @)QJ9? q"T !@_qT)B) Q? qhT @h4 HR**r )kij4) kaT*?kaTRGRODWC_B @{Ũ_2Aq(R  C@{ Rog _ W O )rhiHR(r PRijh*r| )ij(FR ER(r)rcj(bj)BAy q! TGq TK@U h@R**E@RR*R**R! RRR*RBy q!T.@R*@@:@AR* !Q@@!R*( qR"R*R**RBR*@@R*( q'S):@R* @ k3 K qRbR*RBR*RR"r*@C qLTG AR*rIR` QBA*y qT@ @!@)BA R)ry q  T@9r TK@ -@*@94)@@6) @@* h@*E@1@@QQ QQ@9@9 @9@9@9@9l8m8n8o8BcR**;3+# @96qT*9ZrTh@R*E@1@h@jw8RE@1@@Th@RE@1@TK@-@@9h5h@ሁR*E@1@*R**R*B*T@h@?ֈ@* @?** Bc!R*****^@9h5C R5R$ @#`079 27A9Ch4c`95/H4RRR*5rR8r9rh6@@9N7a@@9a/HkTv/H1`Ti@ R*r)E@*RR8 kw`Tc`9 5G@C***7/HkT_W*QAz6q!TR(rZY@9*rAT]@ R!1@?H@]*Y9*r~@T]@ R!1@?H@ <S)!*=9*Y @AR*?*}@R*(r@k(_ R RN *r: ICHGR qH)_ ?SHHODHCGqH)/H  kCT{G1TG1T Rh()rii!8R*1T Rh )rii^A8R*C^R6rA6Ru:jv*jvA2R*h@!8R*E@1@*A8R**A6R*@*BR****W@RA95R*R"R@9R*!"R**!9R"R*R"R*R"R*A9R**1R*21R*BR7Rr*@h4'@'@)"A*8R*WG9R*@43@R*7@R*;@R*?@R*@h4@"R!R*@R*@aR*#@AR*/@R*h@E@AAy q!TK@@@ (e32@eS9R*BAy qT'S)AR*  qS(_IK@)!@ HR{k@;>(_I(_I@)R9 XR2@)r`  # 2@C*c AR)rR` **hRh@B*E@1@AR(r` _)@?!TOLWK_JgIoH{GC_  {R(r hhRR(rj( @{¨_  R(rhh `R)riiq(R_  C@ R{)rog _ W O  @`R(rhjh,5PR(r!:R*xqTc`9(48R**8R*D2M94CH~< 4`9H4!:RHR"R*:R*4@97!9R**a8R*<r|S`TY5WG54w4R(r( Wph@:R*E@1@*:R**ሁR**R**R**AR*BR******:R**@4@4kaTk@Th@B*E@**1@e))W:)';)/H)R HR 9 C i *r)ij?q T RM qR)r +h@E@e))W:)';)/H)R 9W5G*h@BRE@**1@_ qa Th@ሁR*E@1@*R**AR**BcR***BAy qaT!R*R*aR*AR*#8R*'a8R*+R*/R*3R*7R*;R*?(R];@ )@;j@@)ˬ HE@ }R*} 1)lL+yhJ}̛JG kBT*y(A9R**a9R**A6R*/H(4tR)r)v RUS)rj;Jii_kT{k!Th@A6R*E@1@*B***hR;@ )@;j@@)ˬ HE@ }R*} 1)lL+yhJ}̛JG kBT*y(HR AR)r`  _)@?HTOLWK_JgIoH{G RC_7(R@@@@K8Bh@ HR)ri E@$y{E)1@BR*8R*|8R*<\4H4WG@5Y)3@Hk2  kT@w4q#TR(r W Q}SIqhTh@BARE@*1@@*G(4 K@(@9 q8(%@)@BT G?kAT8=qhT9R*K@*(@9@8%@@BwR**48@*_ &R8]@B@@@h@* )CE@JCii81@hy{BAR**@j=)By;h@ ICJE@GEii8_1@B!R* qTz{z;G_1T{1T HRh )r iiJQ i)G{G1zZ!R*R*aR*AR*#8R*'a8R*+R*/R*3R*7R*;R*?7RqRHO*r G ij*#+ * qR)r5*+R k@ RrRtRkE@ qR-r.rHRN `1@ (ro 0rJ@ kip@e@9gij8 @B!R*h@94@ R sR+rN Iik* E)BA @)y? qT#@) Q)}S?IqT G4#@ @@)IKL I  kTJ  {@ R,ǑRlr)} )} RII sRN *rii*4R sRN)ri)h@@ RsRE@N @7r @)@JjwCii81@@ KBAR@#@tR uRjw)r*r {j)j*@( k)BAy qAT@4G4AR*@|S @kT@kITh@KE@Bc!R1@**6R @ @"q"R)H  ') `AR(r`=BAqhT @ R sRN s@+r) ( WG, * 5w 4 @3@ @/@K k탗m R+r } #k  Rj k} -ǑRmrk}K@q ( Ts )SGH4#@ Q}SIq(RT K@ @#@@ R K} kKKh i}  s@,ǑRlr)} RiI sR+rN _!@qi+T s(R+h@B*E@*1@OAR(r`h@GE@BcR1@ @ R.ǑRE)k} kKKnrj k} k}K!@q (T s(R*)Ri9  R(r_hhO@BcE@*{1@PR(rW@#@)%G&GE@'/HB1@*(/Hh4HR(r@zt*E@*1@(/HT@iBA$@%@E@&G'G1@(y qB*@iBA$G%GE@&G'G)y1@(G? qB*R(rtR@*BE@*1@*@ +B) +B /BE@-G.G1@(G$ Kf KBcRR* @AR*E@1@*B**@ሁR*E@1@*B**@R*E@1@*B**@R*E@1@*B**@tBE@1@Th@@?**B**@E@1@h@ @?**B**hBAy qa T@9 6(K@ -@!@C4*@94)@@3 ) @@* (K@!@@B*E@1@(K@ !@4*rT@R*E@1@@ct8RE@1@rT@RE@1@(K@ !@ kT-@@9h5OFWE_D@{B_  {bR(r @O* -@*@94)@@ ) @@* q+T***@8s T*@-@@9H5*OB @{è_  @{Cog_W O UR(rhh4 PR)r HR*)r3Jii4skcTkT _)@?T*OJWI_HgGoF{E_b`9(4D2M9h4Ȣ`94@ R vR*riR)E@9 (@HC@7@ R)r h4@5cC)B*)@@E@1@_%@ q`TqT@,@*@)@(IeSNS)Gq)H  {R*rh)hj gR)r =R*rh)hjhR(r:Rj|P)r h(hi HR)rOh)SR(rhh8 PR)r 4**NGRGdS&)h@B*E@1@ iR+r nR ,rk !}} HRl r+r}  mj **n 9n_}_}_}_}jRl2 RmRn  K? kL(T iB(M( :h@hiB)JakF@`FR"RR$r* PR +rF{{BJ` !BOA{¨_  { O_>jhqE@?T2@>AB!R@q`Tq!TRR(rh @)5)R RB)y? q T bR)riji RR(rh @i5)R bR5rajuj5dR(ru@9(6@yR**XR(r`@ySR(rhjh8h4TR(r`jh0M94UR(rhjh8H5߃R(rjhq(RPR(r`!R"RER(rhjh FR)raji?OB @{è_q@Tq T qT>Aq@T7 AR)rR` `RdR(r)R*rij(u @9(6@ybR5rajuj5?R(rhj HR*ri )ij?q T RM qR)r SR(rhjh8h4$h@ GR)rdjiE@B1@c*xh@BE@c*1@dR(ru@9H6R@yb  C@ R{WO)rhiTR(rCjhSR(rjh8h4`R(r@4"B)?k@T@(@:Ո@@BE@c*1@ @)@?!TODWC@{AC_y1TC5@ &2@ @ R&2vR P*(r(ih^RR*B.B2B  K_ k(T((  :Ո*B*R(r`R@@  @{o g _ W O @ SR PR*rE@)rhj86@ R)ry 4DɊR)FrT kTɩR)Fr kaTRR"B)7H"@9~@?k87T`2@B>a T`2@B*@(@:Ո@c`9H4R vR)rhSiiB^@ DRE@#@1@@ R2@R@*@& @@C)(}" HR )r h@BARh@&@@\)E@@1@z5G5@4Gh@Qh*B)@  K_ k(.T(B(  :,@(@:Ո@c`9H4R vR)rhSiiB^@ DRE@#@1@@ R@@R@@& @@}S) @rhR*@B HR)r  iiBARJ i)@&@@\)E@@1@z5G 5@ 4G HR *r(ijQ(i**B)@  K_ k!T(B(  :G@*F*B.B2B  K_ k(T((  :Ո*B*(@`2@?G(@?֤2@@4(7@ KR)r iiJ i) )B -B_ kT 1BI !A:G@*F*B.B2B  K_ k(T((  :Ո*B*(@`2@?G@4(7@ KR)r iiJ i) )B -B_ kATR(r`R  1BI !A: -B) -;"B)?kaT@BE@1@*hR@(@:Ո@ R@@@R@&@}S) @rhR*@x HR)r  iiBARJ i)@&@@\)E@@1@z5GH5@4G HR *r(ijQ(i**B)@  K_ kT(B(  :Ո@<G@*F*B.B2B  K_ k(T((  :Ո*B*(@`2@?G@4(7@ KR)r iiJ i) )B -B_ kATR(r`R  1BI !A: -B) - _)@?!TOMWL_KgJoI{H_  {PR(rWO8R**gR(rjhʶ@ `ʶ@I}SH=?qq *q)4@qCT6@) |S )} } )} } *}SH! ɚ9i@ R*) *i3 JJI`8_q(T kmij8 .@)j\)} I} ]Sj\) `R)} ) } )uSj\) `R)} ) } *yS)y%  j\) `RI} } )mSj\) R)} ) } )qS} I  :HqR R RV)+r) k@jF>H kKR]ShjBkflJ(@*-@WAhzj(%@*AA+AhjkB(@*-@hjB k (%@*AA)Ahj OB{è_  {R(rO4hh@ HR)r  zh)Qz(GR(rjhBcR$j(@E@1@@c@BE@zcR1@*B)@  K_ k(T(B(  :Ո@OB @{è_  R(rhh KR)r iiJ i) )B -B_ kaT_ 1BI !A: -B) -_  R(rhhHJR)r iiJ i) )B -B_ kaT_ 1BI  !A:_  *_  {R O(r3hh5B;ը5  RB"R*b~*5 Ri*B)*) Ki*Bj.B) K&)h5B OB @*{è_)Ra4?R  {VhhW _O@E@5@W g54@(`7^R(ry(@I@ }R(@ҩ i} I}ɛHT_R(rx@ሁR*ka T]R(rh @4)q a TdR(rt@9(6@yh@]R)r{ E@d@1@Bc*h@E@ AA)y? qT bR)riji1@GR(r6!@ujh*lBc****h@hGR(rijh)ij((@I@?j@@)ˬ HE@ }R*} 1)lL+yhJ}̛JG kBT*y( ARKR @R+r(r)r*R` j(jj)ሁR*>Aq!Th@B*E@1@ AR@R*r(rR` ij(@ XR)r`  OEWD_CgB @{ƨ_@"5******@@5  {@@*{_  {@*{_F8ը RFFqa_*Jj5i~ 5   {!!5*{_@{{_debug_enablefrmbase_cont_bitleveldynamic_buf_num_marginradrrvaldecode_timeout_valmax_process_time pre_decode_buf_levelstart_decode_buf_leveludebug_flagwithout_display_modemh263_mcmmpeg4_mc_5****%d: %s%s ammvdec_mpeg4_driver_init_module3failed to register ammvdec_mpeg4 driver ammvdec_mpeg43%s memory resource undefined. ammvdec_mpeg4_probe3 amvdec_mpeg4 decoder driver alloc failed vdec.mpeg4.%02xammvdec_mpeg4: oversize, unsupport: %d*%d sysinfo: %d x %d, rate: %d pdata->config: %s parm_v4l_buffer_marginsidebind_typesidebind_channel_idparm_v4l_codec_enableparm_v4l_canvas_mem_mode3%s init failed. %s end. %s: size 0x%x sum 0x%x %02x %02x %02x %02x %02x %02x .. %02x %02x %02x %02x run%06x:%02x %s, size=%d, %x %x %x %x %x 3[%d] %s: the %s fw loading failed, err: %x localamvdec_mpeg4: error HW context restore restore ref0=0x%x, ref1=0x%x, rec=0x%x, ctx_valid=%d,index=%d [%d] get fb fail. [%d] set %d x %d from IF layer [%d] %s(), v4l ref buf addr: 0x%x vmpeg4_v4l_alloc_buff_config_canvas3mmu alloc failed! size %d idx %d amvdec_mmpeg4: reset. param = 0x%x unstable_pts = %d &hw->wait_qvmpeg4_work: result=%d,status=%d %s: force exit vmpeg4_work%s: eos flushed, frame_num %d fatal error, no available buffer slot.[%d] %s(), v4l mem handle: 0x%lx prepare_display_buffield0: pts %d, pts64 %lld, w %d, h %d, dur %d error, no available buf. filed1: pts %d, pts64 %lld, w %d, h %d, dur: %d error, no available buf prog: pts %d, pts64 %lld, w %d, h %d, dur %d %s: put num:%d vmpeg_vf_putindex=%d, used=%d %s fatal error, no available buffer slot. notify_v4l_eos3[%d] get fb fail. [%d] mpeg4 EOS notify. dbg %x: %x, level %x, wp %x, rp %x, cnt %x time_inc_res = %d, fixed_vop_rate = %d, rate = %d %s, level = %x, vfifo_ctrl = %x, bitcnt = %d vmpeg4_isr_thread_fninvalid buffer index %d. rec = %x new pic: index=%d, used=%d, repeat=%d, time_inc=%d warn: duration %x, set 0 %c, offset=0x%x, pts=0x%x(%d), index=%d, used=%d IPB####mmpeg4: pic_num: %d, index %d, type %c, pts %x disp: index=%d, pts=%x(%d), used=%d, picout=%c(dec=%c) disp: pic_type %c, pts %d(%lld), diff %d, cnt %d %s, size %d, consume %d, res %d error: bitbyte %d hw->chunk_size %d %s: frame num:%d v4l_res_change Pic Width/Height Change (%d,%d)=>(%d,%d) ====== %s vmpeg4_dump_statewidth/height (%d/%d), i_fram:%d, buffer_not_ready %d, buf_num %d index %d, used %d is_framebase(%d), eos %d, state 0x%x, dec_result 0x%x dec_frm %d is_framebase(%d), put_frm %d run %d not_run_ready %d input_empty %d,drop %d receiver(%s) state %d %s, newq(%d/%d), dispq(%d/%d) vf peek/get/put (%d/%d/%d) VIFF_BIT_CNT=0x%x VLD_MEM_VIFIFO_LEVEL=0x%x VLD_MEM_VIFIFO_WP=0x%x VLD_MEM_VIFIFO_RP=0x%x PARSER_VIDEO_RP=0x%x PARSER_VIDEO_WP=0x%x frame data size 0x%x 3unsupport mpeg4 sub format %d mmpeg4 get fw %s, size %x 3get firmware failed.%s vmmpeg4_initWRITE_VREG(%x,%x) READ_VREG(%x)=%x vdec requested to be disconnected %s decoder timeout %d timeout_process%s frame_num %d, chunk size 0x%x, chksum 0x%x %s force exit %d ammvdec_mpeg4_removemmpeg4ammvdec_mpeg4 module remove. parmtype=debug_enable:uintparm=debug_enable: ammvdec_mpeg4 debug enable parmtype=frmbase_cont_bitlevel:uintparm=frmbase_cont_bitlevel: frmbase_cont_bitlevel parmtype=dynamic_buf_num_margin:uintparm=dynamic_buf_num_margin: dynamic_buf_num_margin parmtype=radr:uintparm=radr: radr parmtype=rval:uintparm=rval: rval parmtype=decode_timeout_val:uintparm=decode_timeout_val: ammvdec_mpeg4 decode_timeout_val parmtype=max_process_time:array of uintparmtype=pre_decode_buf_level:intparm=pre_decode_buf_level: ammvdec_mpeg4 pre_decode_buf_level parmtype=start_decode_buf_level:intparm=start_decode_buf_level: ammvdec_mpeg4 start_decode_buf_level parmtype=udebug_flag:uintparm=udebug_flag: ammvdec_mpeg4 udebug_flag parmtype=without_display_mode:uintparm=without_display_mode: ammvdec_mpeg4 without_display_mode description=AMLOGIC MPEG4 Video Decoder Driverlicense=GPLauthor=Tim Yao vermagic=5.10.97 SMP mod_unload aarch64name=amvdec_mmpeg4depends=decoder_common,firmware,registers,amvideo,amvfm@@ amvdec_mmpeg4OHOS (dev) clang version 12.0.1 (llvm-project 971024173e3cfeeed7d02540464cc35e94ecb832)OHOS (dev) clang version 12.0.1 (llvm-project 971024173e3cfeeed7d02540464cc35e94ecb832)    (8L8crorur  ` :  L0 ' (q%DD6/\2Hl ]+px,lx7<5H$@2`<?P(BBdLC\C!C; 1G(@H$N  g(|0 ((K$!o3F )iP(%6 @x(" E3(@!X4l J(E!f< ]  p  n(@(Y(} ("@ *@(I,$sPD h(.  (=#e@?/n z$  a *JWi  ( ' 7 I P ` u      h     !  4 E V p          ) > L b i x           > T Z f x           ( B W l amvdec_mmpeg4.mod.c_note_7$d__UNIQUE_ID_vermagic265__UNIQUE_ID_name266__UNIQUE_ID_depends267vmpeg4_multi.c$xammvdec_mpeg4_driveramvdec_mpeg4_profileammvdec_mpeg4_probedec_statusvmpeg4_set_trickmoderun_readyresetvmpeg4_isrvmpeg4_isr_thread_fnvmpeg4_dump_statevf_provider_opscheck_timer_funcvmpeg4_local_initammvdec_mpeg4_removeget_data_check_sumfind_free_bufferprepare_display_bufnotify_v4l_eosvmpeg4_workvmpeg4_local_init.__keyset_frame_infovmpeg_vf_putaspect_ratio_tablevmpeg_vf_getvmpeg_vf_peekvmpeg_event_cbvmpeg_vf_statesmmpeg4_suspendmmpeg4_resume__param_str_debug_enable__param_debug_enable__UNIQUE_ID_debug_enabletype338__UNIQUE_ID_debug_enable339__param_str_frmbase_cont_bitlevel__param_frmbase_cont_bitlevel__UNIQUE_ID_frmbase_cont_bitleveltype340__UNIQUE_ID_frmbase_cont_bitlevel341__param_str_dynamic_buf_num_margin__param_dynamic_buf_num_margin__UNIQUE_ID_dynamic_buf_num_margintype342__UNIQUE_ID_dynamic_buf_num_margin343__param_str_radr__param_radr__UNIQUE_ID_radrtype344__UNIQUE_ID_radr345__param_str_rval__param_rval__UNIQUE_ID_rvaltype346__UNIQUE_ID_rval347__param_str_decode_timeout_val__param_decode_timeout_val__UNIQUE_ID_decode_timeout_valtype348__UNIQUE_ID_decode_timeout_val349__param_str_max_process_time__param_arr_max_process_timemax_decode_instance_num__param_max_process_time__UNIQUE_ID_max_process_timetype350__param_str_pre_decode_buf_level__param_pre_decode_buf_level__UNIQUE_ID_pre_decode_buf_leveltype351__UNIQUE_ID_pre_decode_buf_level352__param_str_start_decode_buf_level__param_start_decode_buf_level__UNIQUE_ID_start_decode_buf_leveltype353__UNIQUE_ID_start_decode_buf_level354__param_str_udebug_flag__param_udebug_flag__UNIQUE_ID_udebug_flagtype355__UNIQUE_ID_udebug_flag356__param_str_without_display_mode__param_without_display_mode__UNIQUE_ID_without_display_modetype357__UNIQUE_ID_without_display_mode358__UNIQUE_ID_description359__UNIQUE_ID_license360__UNIQUE_ID_author361mmpeg4_pm_opscodec_mm_vmapdecoder_do_frame_checkarm64_const_caps_readyparam_ops_uintdecoder_bmmu_box_get_mem_handlegic_pmr_syncvdec_enable_inputplatform_driver_unregistervf_notify_receiver__this_modulevdec_v4l_set_ps_infos__stack_chk_guardtrickmode_ivdec_prepare_inputfinish_waitget_config_intcleanup_modulevf_provider_initparam_array_opsvdec_core_requestmemcpyvdec_reset_corevdec_set_vframe_commprepare_to_wait_event__wake_upvsnprintfamvdec_startcodec_mm_unmap_phyaddrinit_modulevdec_free_irqcpu_hwcap_keyssched_clockamvdec_enabledecoder_bmmu_box_alloc_boxmmpeg4_debug_printschedule_timeout__stack_chk_failqueued_spin_lock_slowpathvf_get_receivervdec_core_releasepts_lookup_offset_us64mpeg4_debug_maskquery_video_statusinit_wait_entryvdec_set_prepare_levelvcodec_profile_registermod_timervdec_schedule_workvdec_core_finish_run_cond_reschedvdec_v4l_get_pic_infoprintkcodec_reg_readcodec_reg_writegic_nonsecure_prioritiescodec_mm_dma_flushmemsetdel_timer_sync__init_waitqueue_headvdec_has_more_inputjiffies__platform_driver_registersprintfdecoder_bmmu_box_alloc_buf_phydecoder_bmmu_box_freevfreeamvdec_stopvdec_vframe_dirtyinit_timer_keyvdec_set_statusvdec_clean_inputamvdec_resumecancel_work_syncget_firmware_datavdec_v4l_res_ch_eventvdec_v4l_get_bufferamvdec_suspendparam_ops_intvmallocamvdec_vdec_loadmc_buf_exvdec_fill_vdec_framecanvas_config_configvdec_v4l_write_frame_sync 48PThpHgLPgTXpx|       ' '04@ (,<@DTX   33 $(8J<JL\X`Xl|llQ Q   $ ( ,0PTDXD\dYY0 0 Q Q $(l ,l 08<@DHLT`h2 E 2 E 48Pl\ `E d lE x` p Yt Y    p  t    P        $ 4 D T p      lpDHX\`lpt 0x|@L|YY Y$Yh ,8Xhp$4L\l|(T|3a3aH H,<g@gP`dlmm$((|48P|(,Ddt"P"P(8HXh`dele|PLPd l x         `!p!!!!!!!!!"x"""@"@"###x#x#P$T$l$$$$P$$P$T&X&l&&&&P&&P&'D'<L'GP'<T'G''Y'Y''''(0(8(h(p(|((((> (> ((V (G)V )G$)<)@) H) T)l)p) x) ))) ) ))) ) )* * ,*`* d* p***** * *+ ++++ +D+`+++ ,`,,,,------4.8.L...$..$.///00011Y1Y11@212<2@222<02222383T3d3333D4`4444(5,50585@5L5P5T5\5h55555@6\D6H6\P6\6`6h66L7T7X7d7h7l7t777<8@8P8 T8 \8848V848V8H9L9x9:4:V:4(:V<::j:j:d;;;;;D<<<<,=0=@===>>>>?L?|????@ @ @@