PNG  IHDR   Q gAMA a cHRMz& u0 `: p Q<bKGD gmIDATx w U ﹻ & ^C X( J I@  "% (** B X +* i "]j(IH {~ R) [ ~ >h { }g y )I $I j          .I $I $ ʊ y@ }x . : $I $I i}  V Z  PC)I $I F  ^ 0ʐJ $I $ Q^ }{ "  r = OzI $gR Ze C. IO vH eK X $IM px sk . 쒷/ &  r [޳ < v| .I ~ )@ $ up dY R  a $I | M . e Jaֶ pS Y R 6j >h %IR ز  i f&  u J) M $I vL i = H; 7UJ , ] ,X $I 1  AҒ J  $ X Y XzI @G N ҥR T)E @ ; ]K* M w;# 5_ wO n~ \ DC& $(A 5 R R FkvIR } l ! RytRl; ~^Ƿ  Jj اy 뷦BZ Jr &ӥ 8 P j w~ vn v X ^ (I; 4 R= P[ 3]J , ]ȏ ~ : 3 ? [  a &e)` e* P[ 4] T =Cq 6 R[ ~ޤ r XR Հg( t _HZ -Hg M $ ãm L5 R u k *`%C- E6/   %[ t X.{ 8 P9Z   .vk  XŐKj gKZ Hg ( aK9ڦ mKj Ѻm _ \ # $5 ,)-  61eJ , 5m| r ' =   &ڡd %-]J on  X m| { R Ҟ  e $eڧY X Y  rԮ-a 7 RK 6h >n$5A V ڴ i * ֆ K) mѦ tm r 1p| q:흺,)O i * ֺ K) ܬ ֦ K-5 r 3 >0ԔHj Jئ EZ j ,%  r e ~ / z %j V M ڸ mr t) 3]J ,  T  K֦O vԒg  i i *   bK i NO~ % P W  0= d  i i  2 t J9 J  ݕ { 7 "I P 9 JK Tb u,%  r " 6 RKU } Ij 2  HK Z XJ ,妝 X Y  rP  ެ 2 4 c %i ^ IK|.H ,%  r b :XR l 1X 4Pe/` x &  P 8 Pj 28 M z s x  2  r \ zR P z 4J } y  P[g= L)  .Q[ 6Rj Wgp FI H *-`I  M RaK9T X c q *I y [ j E>cw% gL R ԕi F Cj - ď a` #e~ I j ,%  r ,)?[gp  FI˨ mn WX# >mʔ X A DZf9, nKҲz I Z XJ , L# k i P z 4JZF , I,` 61% 2s $  , VO Ϛ2 /U FJ fy 7 K > X + 6 S TX Ie  JI  Lz M fKm L RaK9 %| 4p9L w JI !`N sia zĔ)   %-  X  M  q > pk $-$ Q 2  x# N ؎ - QR }ᶦHZ ډ ) J , l#  i@y n3   L N` ; nڔ X  u X5 p F)  m| ^ 0( >B H F9(c զE er JI rg 7 4I@z 0\ JI  i 䵙 RR 0 s; $ s6eJ , `n 䂦 0 a )S) A  1eJ ,堌# 6 35R I gpN Hu  TH _S  ԕqV e ` &S) > p;S$魁eKI  uX `I  4 춒 o}`m $1" : PI <[ v9 ^ \p TJj r iRŭ P{# {R2,`) e-`mgj ~ 1 ϣ L Kam 7 &U\j / 3mJ , `F  ;M ' 䱀  .KR#  )y h Tq ;p cK9(  q!w ?  u RR,n.yw *UXj# \ ]ɱ  (q v2=R q f B#i Jm m L <] Y ͙ # $5 u TU 7 Ӧ X R+q ,`I} qL '  ` 6 K ͷ 6  r , ] 0S$- [RKR3 o iRE | nӦ X R. (i : L D L TJj Y %o : )  6  r x zҒ q TJj h㞦I  . $Y R.ʼ n GZ \ֿ  f:%5 5 I ˼! 6 dK x m  4E "mG _  s? .e*  ?L RfK9 %  q # uh$ ) i 3U  L RfK9yx m܌b j 8  4 $ i 1U ^@Wbm  4uJ ,  Ҫ A >  _Ij ?1 v 3 2 [ gL R D 9 6 o Ta R ׿ N7% L 2 NT ,`)7 & Ɲ L *꽙 yp _$ M 2 # A S ,`)7 $r k TA 29 _ Iy e" |/0 t) $ n X T2 `Y J  ; 6 J x" .e < ` $) P I$ 5 V4] 29   SRI> ~ =@j ] l p 2`K9Jaai ^" Ԋ 29 O RI% :X V5]J m  N9 ] H;1U C39 NI%  Xe78 t)a ; O i Ҙ >X t "~G> _mn:%  |~ޅ_ +] $ o ) @ ǀ{hgN; IK 6 G& rp ) T2 i ୦K Ju v* T = T  O SV >( ~D >d m ,I*  Ɛ : R # ۙNI% D>G .n $ o ; +# R R ! .e U  ˽ TRI 2 8 t)1L WϚ>IJ a3 oF b u& : tJ* (F7 y 0 Z R ^ p  'Ii L 24x | X RI% ۄ>S1]J y [z L $ adB7  .eh4  % % 누>W E Tf+3 IR: I 3Xה)3אO ۦSR O' ٺ )S }" q O r[B7 ϙ.edG )^E TR"R t R ݜh  0}  < S ɧx .6,) &  )SI p j 'I ? A L "  L  .\ TZV N ! 'I Y. pAS 5} TRbNL 3 ” d b e ) 4] Mg/S  Z{ni ,)=k  Д d p ǦO uLb7 ߛ2%lO }u ) K ]le T P  j eS(I Z ִ R ^eJ%%* /\ Ke ̈́ -O M $  |.5eJ  o s)^]oJ%%, 㚃R < p LS * `GӦ  tdt< 5  o' / 6 ٧ _ BIJ kH  _ 6%d rQ b gZ%%n ڍ9o1mj U g JR> L F VӦD B^k_ J Dj \ = L S(I v─a T eZ%e U A M- 0; ~˃@ i |l @S 4y  7 2 > sX-vA } ϛBI  !ݎߨ  W l *)3{' Y| iS lEڻ(  5 K t SI $ Uv0 2  ,~ ԩ~ x ; P 4 ց C r O%ty n4 25: KM l D ^ 4JR xS ه F_}شJ T S 6uj +ﷸk $e Z O% G *^ V2  u3E Mj 3 k%)ok  I]d T ) UR K DS  7 ~ m@ TJR ~ 荪 f T" ֛L \ s M  -0 T K f J z+  n إK r L  &j ( ) [ E&I ߴ>e FW _ kJR |! O :5 /2跌3 T- '| zX  r yp0 J S ~^ F >- 2 < `*% ZFP ) bS  n"  L :) +pʷf(pO 3 TMW$~  >@~ū: TA IsV 1} S2 < % ޟ M ?@ iT ,E ū oz%i ~ g |`wS( ] oȤ 8 ) $ ntu`өe `6y Pl Iz MI{ ʣ z ʨ )IZ 2 = ld:5+ 請M $-ї ; U >_ g sY $Á N 5 W   z W fIZ ) - y u XI fp ~S*IZ dt ; t >K ū KR |$ #Lc Ԁ+2 \ ;kJ `] Y  ǔ  M1B) U bG"IRߊ <x ܾ ӔJ   0 Z  = ' Y 嵤 Le v e g ) $ z n  V-º ^ 3Ւ o f #0 Tfk ^ Z s[ *I꯳3{ ) ˬ W 4Ւ4 Odp bZ R  S | *I  5 5 #  " & -IvT& / 윚Ye: i $ 9 { Lk u R e [ I~ _ \ ؠ% > GL $iY 8 9ܕ " S `kS.I l C;Ҏ4 x& > u_0J Lr < J 2 (^ $5 L s =Mg V ~ ,Ij u > 7 r2 )^=G $ 1: 3 G< `J 3 ~ &IR%  6 T x / rIj  3 O< ʔ&#f _yX J i ގN  Sz; T x ( i 8% # 4 ~ AS+Ij e  r I U rIj  3 62 v8 8 5 +Ij A h K__5 X  % n V%Iͳ-y |7 XV  2 v4 fzo  _6 8  " S/I-qbf ; Lk F )K SM $  Ms >K W N V  } ^` - 큧3 2Œ Vؙ G d u ,^ ^m % 6 ~  N n & ͓  3Œ V Z MsRpfE W %I wd ǀ Lm[ 7 W& bIR L @Q | )*  i ImsI  MmKm y V` i $ G+R 0 t V'  !  V )֏ 28 v  U 7͒ v  H ꦼt  x ꗞ T ;S }  7 M f + fIR  H N ZUk U x5 SA Jㄌ 9  Mq  μ AIRi| j 5 )o *^ '<$ T  w I 1 hE U ^c _ j ?  Е$%d`z c y f ,X O IJ nTg A U XRD   } { H } ^ S,P5 V 2 \ Xx`p Z  |Y k: $e ~ @nW L .j + ϝ Y b퇪 bZ BV u ) u  /IJ_ 1 [ p.p60 bC >|X 9 1P : N\ ! 5 qUB}5 a5ja `ub c VxYt1N 0 Z  z  l4 ]7­gKj ] ? 4ϻ * [ b g$)+À *x쳀ogO$~,5 ز U S    9  lq3 +5 mgw@ n p1 sso Ӻ=  | N6 / g( Wv7U ; zωM= wk ,0 u T g _ `_ P` uz? 2 yI !b ` k ĸSo +Q  x%!\ ο e   | އ  ԁK S-s6 pu _ (ֿ $ i+ + T8= e Y;  צ P +p h x WQ v  * |p1 .  ά. XRk IQ Y P, d r Z  |   B % w P| S5` ~́@ i ޾ E ; Չaw{o' Q ?% iL{u D ?  N1 B D ! o w PHRe FZ *    k _-~  {  E9 b- ~P `  f E{AܶB J A FO wx6  R ox 5 K5 = W we hS8 ( J C l J  ~ p+ F  i ;ŗo+ : bD #g( C " wA^  r. F 8L; dzd IH U X ݆ Ϟ X g )I F q e m %I 4 d j&pp T { '{ HO x ( Rk 6^C ٫ O. ) 3 :s( ۳(Z ?~ٻ8 9 zmT" PL tw䥈 5  &b<8GZ- Y & K ?e8,`I 6  e (֍x b8 3 ` r zX j )F =l($I j 2* (F ?h(/9ik:  I`m# p3 Mg   L aKj c /U # n5 S #  m(^)=y=đ x8Ŭ  I [U]  ~S цA 4 p $-F i(  R , 7C x ;X = c   I > { Km \ o(T v 2 v x 2q i   iDJ N , Ҏ  !1f 5quB j 1  ! 8 r  D Fd( !  W  Ql ,g S k  L 1Bx g' ' ՞ ^ ǘ; p Q  P(c _ IRu j g( W z b s # P ­rz > k  c&nB= q+  ؔX n#r5  )co *Ũ +G ?7 < | P   Q ӣ' G `uO d>%M ct z # Ԫ  ڞ & 7 CaQ ~N '  -P . W`Oedp0 3C!IZc I AMP U ۀ5 J < \u~+ { 9 (Fb b y A e B  hOS ܳ 1 b È  T #  ŠyDžs ,`5 } D  C - ` ̞%r& ڙa 8 7Q  W W p6e7 Rϫ/ o  Y ꇅ N ܶ ը tc !  L  A  T 7 V4 J sū  I- 0 P x z7 QN F _ i   Z g úW k G 83  0e Wr9 X  ]㾮݁#  Jˢ C }0 =3 ݱ tB i ] _ & { {[/ o[ ~ \q 鯜 0 0 ٩  |  cD 3 =4 B_b RY b$ó BR sf &  l L X#M* C _ L܄:gx )WΘs GSb  u L rF$9 ' ;\4 Ɍ q ' n [%p. Q`  u h N b`eCQyQ| l _  C>L b꟟3h Sb # x N xS s^ 88 | Mz ) }: ](vbۢ amŖ࿥ 0)Q 7 @ 0 =?^k(* J } 3ib kF n H jB׻ NO  z  x} 7p 0 t f   D X .lw gȔ h Ծ Ų }6 g E | Lk LZ t  eu+= q \I v0쮑 ) Q ٵpH8 /2?Σ o > J v pp h  o~ f>%bM M } \ // ": PT c(v 9v ! g ո Q ) U fV G +! 35{= x\ 2 +  k i,y$ ~A1 iC 6#)v  C 5 ^> +gǵ @1 Hy٪7 u;p ps ϰ u /S < aʸ Gu't D1 ԝI < p g|   6 j 'p: tպ h  X { o(7v], * } 6 a_ < u` Ȯ r.E ;ˑ q io p R "  26 2E 8j ]  U 鿍ǜ v D ,2 վ 8ϫ : e/^AQ T H{ WgRl ̊  2Yx  "1 Q > wX Rk,O ] Lܳ ~V< F 8 a _g~ o. XCD ?S t h 梫A o %  ~K1ݵ O1 LyZ bJ E Q xpq i Cpv a6 _ : wejT  ] " < u`"  2> o4  5rp"N5k ; m { rZ b  Φ${#)  `( Ŵ g ,;j % 6 j  . pyYT ?}-  kB  D c3q A` N WQ  ū2 0 /^A  Z W% N Q MI . X#P # ,^Eb c&  ?X R tA V |Y . 1 ! ؅ ⨉ccww >  i v l(J  T ~ u` ٵDm  q) + Ri  x/ x  8cyFO ! / * !/ & ,7 <. N , YDŽ &ܑ Q F1 Bz )F P ʛ ?5 d  6`  kQձ λc ؎ %58 2  Y &nD _$Je4 >a ? ! ͨ | Ȏ WZ S s  v 8 j   ( I & y j Jb5 m ?  H Wp =    g} G 3 # |I ,5v珿 ] H~ R3 @B   [☉9Ox~ oMy =J ; xUVoj  b U s l_  35 t- (Ճɼ RB7 U! q c + x 4 H _ Q o֮$[ GO< 4` &č \GO c[ .[* A f%m G/ ň M / r W /Nw~B1U3 J ? P& Y )` ѓ Z 1 p] ^l“ W#)lWZ i  l U Q u` -  m|xĐ,   _ ƪ|9i: _ {*(3G ѧ} Uo D+ >m_ ?V Pۅ 15 &}2 | /p IOʵ > G Z9 cmíت mnz  )yߐb   D   >e}: ) r|@ R5q V S  A 10 C% E _ '^ 8c    R 7O; 6 [ eKeP  G  ϦX7 j  b} OT GO^j n*媓 7n  GMC  t, k31 R b (v yܴ ʭ !  iTh8~ ZY Z p  (q  s  RL ? b }  c Ũ ʊGO^ ! rP JO 1 5 MJ[ c&~   Z`" ѓޔ  H1 C&  ^| Ш| rʼ, A wĴ? b 5) t  L U  )F | & g٣O] oqSU j y( x< Ϳ3 . FS k oYg 2 \_#w  j {u'r Q  > o  ; %n | F * O _ L " e 9um Dds ?. fu u Qb IW z |4\0 s b; O v xOS s ; G% T4g FR u rj  (֍ڑb u ԖK D u 1MK{ 1^ q; C= 6\8 F R 艇 !  %\Y Ô U| 88 m )֓ Nc L ve  C 6z;  o& X x5 9 :q 6 1 Z (T 7 >C? g c ļ x ѐ Z  o o- 0 8j ہ x , ` '   Ҕ Oc Rl f ~ ` jj " .N v+ sM _ ]   Z k g( UOP   y εx% pU h 2    ( @ il0 ݽ QXxp px- N S ( W O+ 轾 n Fߢ   3M  <;z ) FBZ j c i u / Q oF 7R ¥ Z F L F ~ # ȣ ߨ^<쩡 ݛк  v џ) )  M E>ώ x4 m#!- m !L;vv#~Y[ đ K  m  x 9.[, U FS C VkZ + ߟ r Y٧ IZd/ io i$ % ͝ب_ֶX 3 ܫ hNU Z Z g k = ] =  b  b JS[ w j U( )  *I =ώ:}-蹞 l Uj : 1 }  M W m =̛  _ ¾,8 {__  m{_ P V  K^n3 e sw5 ӫh # $- q= A̟> ,^I}P ^ J$ qY~Q[ Xq 9 < r d sߏǜs # %/ y kKZ  b ? S k tc 񫝶L  &I W! b >{# & T.^  G Vj _ _R K p  n,b=` ż Y@ ^՝ ;z {p aV Kk QXj / )y TI c&F ;FB G 7w g ZZD G ! x r_ t Ƣ! } i / V =M / # n B8 Xx Ы ^ @ CR <{䤭  Y CN  ) e K OSƟa $ & g[i3 .C 6x rOc  8 TI  ; o hH6 P &L{ @ q 6 [ G zp ^  71 j ( l ` J }]  e6 X  ☉ #͕  ׈$A B1 Vj h㭦IRs  qFBj w Q_7 Xk >y"   N= M B0 , C # o6MR c 0 | $ ) ف  "1  !i xY<  B 9mx `  , t A >)5ػ Q ?j  Q ? cn >Y Z e  Tis v h # GMމȇ p : ԴVuږ 8ɼH ]C. 5C!UV;F`m b Bk L TM vP ʍϤj ? ԯ/Q r1 N B`9s"  s TYs z & 9S%U԰ > { < ؿ SM xB |H \3 @!U | k']   $U +> | HHM  Lޢ ? V9i D!- @ x  TI  î % 6Z *  9X @HMW# ? n N ,o e6 ?tQw ڱ . ]-   y ' :mW 0#! J82qF jH -` ѓ & M 0 u Uγmxϵ  ^-  _ \ ] )@0R t.8 /?ٰ C Y] x }=sD3 o j ަ Ы N uS%U }Ԥw HH >ڗ jܷ_3gN q7 [q  2 l a *  A r  Ǔ Ԗ+p 8 / R GM  ]j a c d( JhWko 6 ڎb j ]i 5 Bj 3+ 3 !\j 1   U Z L s L T v8 HHmup< U  \ GMމ 3 R+  w4R 6 j  XW M T! u( *! Pz , # Sq * 8?vww )kO a $ [& ? * bB X @ % 8 ] = R r)kO w 0j i M Tq ng$ 2\ q 8f : e N1 R xr< 5 ; M p^ @;  7]R ꎾ JtER . / (5 v3 R[ @= h l ?  l @; .  [] Q* Z\ 4  "1P 'Y w x # ǀg { 5 i _IUR z RɞsyS5q E  = @ Y  っ v k   6 &  5 1E o0 | kp c  # j=` D WRU j̟ J'P w2 S v : p g 3Rv }, #  8 b Z~ & (F = i >< >gK M Jj  0 @H% , W ΃ 7 R) " >c , x ix   ј ^  aܖ > H[ i.UI Hc U 1=y W\ = S*  G R~ )AF  = ` &  2 h` D z T 󑓶 J+  ? W+} C % P:| 0H  ܆ }- <;O C[ ~o. $~ i } ~ HQ Tv X Έ r=b}$ v i z L 4 : ȰT|4 ~ * !o X QR6 L k+ #  t/g lԁߖ   [ Jڶ_N$ k *" .  x s  xX  7jRVbA  A ʯKҎ U3  ) zS NN _ ' s ?f ) 6 X  !%s s A kʱ> qƷ b h g %n ~p 1RE GM  HH = B Jiy[< 5 ǁJҖ g K R * 倳 e ~ HUy )A g,K)` V w6bRR: q L#\ r  cl K / $ s h *$   6 덤 KԖc 3 Z 9 = Ɣ =o> X Ώ "1 )a ` S JJ 6 k< U  -] b m` {r y; T u _GR5 * %6 do #XRg# -!nl $u 3 A L+Q{ 9 x~ a- | H  vbq[\ NJT% ] rO8, E -F w)+?(Y{ Lz n6  ׀ ?C  R ~ ,)m 䎧 R 7 cww qpW ڳ=i. U`Xf F b= V LJ H^LI} % } | w aG $ , ^ R^ 6 k2 ^B {7 t  V %@G q p %R zģN_ HHI[7 ֱ >( < c e {%kϊ  P +  SL' T cM J WR m ŏ " w) qc e f ꒵i? b7 b  ( ' " 2r% ~ HUS 1 \<  (` 1 W x 9 = 8HY9 m:X 1 8 b g  D1 u ~|H ;K -  U ep ,, C 1 RV. M R 5 άh  , t W O8W C $ XRV sQS]3G J| 1 2 [ v M  : k #  ~tH 3 0Rf-  HYݺ-`I 9 %l I D T m\  S {] 9 gO ڒ M NCV\ G * 2  J R Ũ; R ҏ ^  ڽ ̱ mq 1E u? To 3I  ) y^ # j J w ^ Ń j ^ v   vl B_ ⋌ P 4x>0$ c> K†A ļ9s_V jT t0l #  m  >E - , , x ,  - W )  سo& 9 6 R E XR.6b  Xw +)G A  E v L ) ͞K4 $p= Ũ i_ѱ O j b HY  / +@ θH9޼] N ԥ %n { &zjT ? Ty) s^ U L lb , P iTf ^ <À ]   62R^V 7)S!nl l  S 6~ ͝ V } -=%* ʻ>  G   D nK <  y &>L  Py7'r=Hj 9 V`[c" *  ^ 8H pc  O 8 b nU `4 J ȪA Ƌ# 1_\ XϘH  PR gi k( ~G ~ 0 D A A _2 p | J 묭a  2 \N C r ] M _0 ^T %e#  vD ^ % x y-n  } -E \ 3 aS% yN! r_ { )s A w ڼp1pEAk ~v < :`'ӭ^ 5  A r X OI驻 T  ( dk ) _ \< w  ^ W I " RFj3 V# M<,o J  .H # \ SK s]    ) 9> P u A * B Y ]  y B " l \ ey hH *t  b K)3    IK Z 򹞋X jN n *n>k ] X _ d ! ry BH  ] *R 0(#' 7 %es9?? ښFC ,ՁQP  j AR  J \Ρw K # j  ah g w ; 2$ l* )  % Xq5 !U᢯ 6Re] | 0 [ _  _64 c h & _} i L8K Eg Ҏ 7 M  / \`|.p, ~` a  = BR?x ܐrQ  8K  XR  2M 8 f ? `s gW S% " Ԉ 7R%  $ N   } ?QL1|-э ټwI Z % pv L 3Hk>,I m g W 7{  E  x PHx 7 3R A  @R S CC  !\ȟ 5I XR^Z xHл $Q[ ŝ 40 ( > + _C > BR t <,T r T {  O / H +˟ Pl6 I B)/ V  C <6 a 2    ~   ( XwV4 g n  XR ϱ5 ǀHٻ?tw 똤Eyxp { # WK  q  G%5 ] , ( 0ӈH HZ ])ג=K1j & G(FbM @   )% I` XR g ʔ  KZ G(v P, <` [ K n^ SJR sAʠ 5xՅF` 0&R b V  t x :Ea UE /{ f  i 2;.I A wW8 / t T x A GOo N ? G } l L ( n ` Zv? p B 8K _g  I +ܗ # i ? ޙ . ) p  $ u tc ~DžfՈE o3  l/)I-U ?a ԅ ^ j x A r A ΧX   } DmZ@QLےbTXGd .^|x KHR{ |Ε W_h]  I J`[ G9 { ) .y )  < D * zk (ּ Ya O 8S ?  2-   H13  #pK" I`]`O h &= S  F1Z /Ie D1R W a "t' x?!)Ou: 1  | 6 gt\s  7 = z_; ؠ > 0X Y A1]q p? p _ k+J*  Y @HI> ^ ? g t.06R n  ,  `  ?) ;p pSF9  Z X L  BJP W j gQ| &)7! Hj Q t  <| ؅ W 5 x W HIz Y oV M G P Hj n`+ \ (d  N W)F+I rS [ | /a  `K | ͻ 0Hj { R,  Q= \ (F }\ W  R)A g SG`I s n AR =| 8 $} G(v C  $)s FBJ ?] _ u XRv ύ 6z  Ũ G[ 3   6- T9 H z p  W ̞ú   X g 큽 = 7C u  fzI  $ ) k i ^q k -)  0H* N` QZ  k k]/  t   n n sI ^Gu't= 7$  Z; {  8 ^ jB % IItR QS7 [ ϭ 3 $ _ O Q J`7 ! ] W "  W,) Iy W AJA ;K  WG `IY {8 k$I $ ^ % 9 . ^(` N| LJ % @ $I }ֽp =FB* xN =gI?Q{٥ 4B)m w $I gc~d Z@G 9K X ?7)a K % ݅K $IZ -`I p C    U 6 $I \0  >! 9 k} Xa  II S 0H $I H ?1R . Ч j : 4~R w @p $I r A* u } W j WFPJ  $I ➓/  6#! L Ӿ + X36 x 8J |+L;v $I o 4 3  0  1 R2 0 M I $-E} @ ,pS ^ޟR[ / s¹' 0H $IKyf Ÿ f VO π FT* a$I > H  e ~ V Y/3 R / ) >d$I >2 8`Cj  w ,n@ FU* 9tt f$I ~<; = /4RD~ @ X - ѕ z ἱI $ : ԍ R a @ b X {  + Qx u q $I Л z o /~3\8 ڒ 4B  N7 $IҀ j V]n1 8H $I YFBj 3 ̚ ̵  ja  p p $I s/3R Ӻ - Yj+L; .0 R ́ I $ A v? #!5 " aʄ  j} U Km ɽ H $Ij C  Ys?h$I Dl8 4 3  . v } m 7 UiI= & =0L g0$I 4 :  emb e `   e Qbm 0u ? $I T!Sƍ' -  s  v )s#C 0 : XB 2 a w I $ zbww { ."p Pz O = Ɔ \  [ o($I aw] `  E ).K v i : L *#gР7[ $I   yG PI=@ R 4 y R~ ̮ ´cg I $I/< t P ͽ h Dg o 94  Z^k盇 ΄8 I 56 ^ W $I ^ 0 ̜ N ?4* H`237}g +h   x o q) SJ@p| ` $I %>   - h O 0e O > \ԣNߌZ D6 R =K ~n($I $ y 3 D>o4 b#px 2 $ yڪt z W  ~a $I ~? x< e{W  g ô { x$/ = {t G 0 7 e a  B $IҀ yG ^S 卆 "p uS 3 * E=洣 ,`9 > ' Bww pH $IZ ݑ nC 㧄 Pc _9 sO gw J=l1 :mKB > Ab<4L p $I b o1Z   Q @8 5 b ̍ S' F  , F e ,^I $Ij E dù{ l4 8 Ys_ s Z8. x m"+{~ ?q, Z D !I $ ϻ '|X h B )= …' ] M > 5 r g otԎ 獽 PH $Ij IP  hh)n# cÔq A' ug5qw  U &r F|1 E%I $% ] !' 3 AFD/;C k_` 9  v !ٴt PV ; x` '  *b Qa w I $I x 5 FC 3D _ ~ A _ #O݆ Dv V?< q w +I $I {  = Z 8" .#RI Y yj Ǫ =f D l 9 % M ,  a8$I $ Yw i[ 7 ݍFe $ s 1 ՋBV A? ` ]#!  oz  4zjLJ o8$I $% @3j A  a4 ( o ; p,,dya =  F9ً[ LS PH $IJ Y Љ+3 > 5"  3 9 aZ <ñh! {T pB G k j}  S p $I lvF .  F$I z< '\ K*qq .f <   2 Y ! S"-\I $I Yw č jF$ w9 \ߪB . 1 v!Ʊ ?+  r : ^ !I $ BϹ B  H  " B ;L 'G[ 4 U #5> ੐ )|# o0 aڱ $I > } k& 1`U# V ? Ys V x > {t 1 [ I~D &(I $I/{ H 0fw " q"  y % 4 I X y E~ M 3 8Xψ L}q   E $I [ >  nD ? ~ s   f  ]o ΁ cT 6"?' _ Ἣ $I > ~ .f |'!   N ? ⟩ 0 G KkX Z E ] ޡ;  /   & ?k O ۘH $IR  ۀw XӨ < 7@ P nS 04 a  Ӷ p . : @ \IWQ J6 s S%I $ e 5 ڑ v` 3:  x' ; w q_ vp gHyX Z 3 gЂ7{{   E  uԹ n ± } $I $ 8t;b| 5 91n ء   Q" P   6 O 5 i } i R ̈́ % Q ̄p! I䮢 ] O{ H $IR ϻ 9 s֧ a=`- aB\X 0"+5"C 1 H b?߮ 3x 3 & g ş g g  l _ h Z^,`5 ? ߎ vĸ% ̀M! OZC2#0x  LJ 0 G w $I $I } < {Eb + y  ; iI,`  ܚ  F   : 5  ܛ A 8 -O -| 8 K 7 s |# Z8 a& > < a&  /V tb t L ʌI $I $I $I $I $I $IRj  D D %tEXtdate:create2022-05-31T04:40:26+00:00 !Î%tEXtdate:modify2022-05-31T04:40:26+00:00 |{2IEND B` sh-3ll

HOME


sh-3ll 1.0
súng bắn silicon – ĐIỆN MÁY CHUYÊN NGHIỆP https://dienmaychuyennghiep.com PEMCOM Wed, 10 Sep 2025 02:41:08 +0000 vi hourly 1 https://wordpress.org/?v=7.0 https://dienmaychuyennghiep.com/wp-content/uploads/2025/12/cropped-LOGO-PEMCOM-1-32x32.png súng bắn silicon – ĐIỆN MÁY CHUYÊN NGHIỆP https://dienmaychuyennghiep.com 32 32 Súng bắn silicon dùng pin KDPJ02-12 (TYPE-EM) https://dienmaychuyennghiep.com/san-pham/sung-ban-silicon-dung-pin-kdpj02-12-type-em/ https://dienmaychuyennghiep.com/san-pham/sung-ban-silicon-dung-pin-kdpj02-12-type-em/#respond Wed, 10 Sep 2025 02:40:20 +0000 https://dienmaychuyennghiep.com/?post_type=product&p=8088 Thương Hiệu : DCK Mã Sản Phẩm : KDPJ02-12 (TYPE-EM) Xuất Sứ : Trung Quốc]]> SÚNG BẮN SILICON DÙNG PIN KDPJ02-12 (TYPE-EM)

Công ty Cổ phần Điện máy Chuyên nghiệp tự hào giới thiệu đến quý khách hàng sản phẩm SÚNG BẮN SILICON DÙNG PIN DCK KDPJ02-12 (TYPE-EM) – một công cụ điện cầm tay đa năng, được thiết kế và sản xuất theo tiêu chuẩn công nghệ tiên tiến, thường được dùng để bắn keo silicon, keo dán hoặc các loại chất trám trét khác trong các công việc lắp đặt, sửa chữa và xây dựng.

SÚNG BẮN SILICON DÙNG PIN DCK KDPJ02-12 (TYPE-EM)

Đặc điểm

  • Sử dụng pin Li-ion 12V, mang lại sự linh hoạt tối đa, không phụ thuộc vào nguồn điện.
  • Thiết kế nhỏ gọn, trọng lượng nhẹ, dễ dàng thao tác trong không gian hẹp và trên cao.
  • Có đèn LED chiếu sáng, giúp làm việc hiệu quả ngay cả trong môi trường thiếu sáng.
  • Tốc độ bắn keo có thể điều chỉnh, giúp kiểm soát lượng keo bắn ra chính xác.
  • Tay cầm bọc cao su chống trượt, mang lại cảm giác thoải mái và chắc chắn khi thao tác.
  • Lực đẩy mạnh mẽ, giúp bắn keo nhanh chóng và đều.

Ưu điểm nổi bật

  • Bắn keo nhanh chóng, chính xác, tiết kiệm thời gian và công sức so với bắn keo thủ công.
  • Tiện lợi, không cần dây điện rườm rà, dễ dàng di chuyển và sử dụng.
  • Vận hành ổn định, độ bền cao, ít hỏng hóc.
  • Thao tác đơn giản, phù hợp cho cả thợ chuyên nghiệp và người dùng gia đình.
  • Đường keo bắn ra gọn, đẹp, tăng tính thẩm mỹ cho công trình.

Thông số kỹ thuật

  • Điện thế pin: 12V
  • Tốc độ không tải: 2.0-8.5 mm/s
  • Lực đẩy tối đa: 1.000 N
  • Nguồn điện: Pin Li-ion
  • Trọng lượng: Khoảng 1.1kg
  • Loại máy: Bắn silicon dùng pin

Ứng dụng

  • Bắn keo silicon để trám trét các khe hở, mối nối trong xây dựng.
  • Sử dụng để dán kính, dán gạch, dán gỗ trong trang trí nội thất.
  • Thích hợp cho thợ xây dựng, thợ nhôm kính, thợ sửa chữa và các dự án DIY.

Công ty Cổ phần Điện máy Chuyên nghiệp cam kết cung cấp sản phẩm SÚNG BẮN SILICON DÙNG PIN DCK KDPJ02-12 (TYPE-EM) chính hãng, nguyên bản với chất lượng tốt nhất và giá cả cạnh tranh. Chúng tôi còn cung cấp dịch vụ tư vấn, bảo hành và sửa chữa chuyên nghiệp, đảm bảo mang đến sự hài lòng cho quý khách hàng.

Liên hệ ngay với chúng tôi để được tư vấn và đặt mua sản phẩm:

Công ty Cổ phần Điện máy Chuyên nghiệp

]]>
https://dienmaychuyennghiep.com/san-pham/sung-ban-silicon-dung-pin-kdpj02-12-type-em/feed/ 0
DIR:/var/www/vhosts/dienmaychuyennghiep.com/httpdocs/wp-includes/sodium_compat/lib/
Upload File :
Current File : /var/www/vhosts/dienmaychuyennghiep.com/httpdocs/wp-includes/sodium_compat/lib/php72compat.php
<?php

require_once dirname(dirname(__FILE__)) . '/autoload.php';

/**
 * This file will monkey patch the pure-PHP implementation in place of the
 * PECL functions and constants, but only if they do not already exist.
 *
 * Thus, the functions or constants just proxy to the appropriate
 * ParagonIE_Sodium_Compat method or class constant, respectively.
 */
foreach (array(
    'BASE64_VARIANT_ORIGINAL',
    'BASE64_VARIANT_ORIGINAL_NO_PADDING',
    'BASE64_VARIANT_URLSAFE',
    'BASE64_VARIANT_URLSAFE_NO_PADDING',
    'CRYPTO_AEAD_AES256GCM_KEYBYTES',
    'CRYPTO_AEAD_AES256GCM_NSECBYTES',
    'CRYPTO_AEAD_AES256GCM_NPUBBYTES',
    'CRYPTO_AEAD_AES256GCM_ABYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_ABYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES',
    'CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES',
    'CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES',
    'CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES',
    'CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES',
    'CRYPTO_AUTH_BYTES',
    'CRYPTO_AUTH_KEYBYTES',
    'CRYPTO_BOX_SEALBYTES',
    'CRYPTO_BOX_SECRETKEYBYTES',
    'CRYPTO_BOX_PUBLICKEYBYTES',
    'CRYPTO_BOX_KEYPAIRBYTES',
    'CRYPTO_BOX_MACBYTES',
    'CRYPTO_BOX_NONCEBYTES',
    'CRYPTO_BOX_SEEDBYTES',
    'CRYPTO_KDF_BYTES_MIN',
    'CRYPTO_KDF_BYTES_MAX',
    'CRYPTO_KDF_CONTEXTBYTES',
    'CRYPTO_KDF_KEYBYTES',
    'CRYPTO_KX_BYTES',
    'CRYPTO_KX_KEYPAIRBYTES',
    'CRYPTO_KX_PRIMITIVE',
    'CRYPTO_KX_SEEDBYTES',
    'CRYPTO_KX_PUBLICKEYBYTES',
    'CRYPTO_KX_SECRETKEYBYTES',
    'CRYPTO_KX_SESSIONKEYBYTES',
    'CRYPTO_GENERICHASH_BYTES',
    'CRYPTO_GENERICHASH_BYTES_MIN',
    'CRYPTO_GENERICHASH_BYTES_MAX',
    'CRYPTO_GENERICHASH_KEYBYTES',
    'CRYPTO_GENERICHASH_KEYBYTES_MIN',
    'CRYPTO_GENERICHASH_KEYBYTES_MAX',
    'CRYPTO_PWHASH_SALTBYTES',
    'CRYPTO_PWHASH_STRPREFIX',
    'CRYPTO_PWHASH_ALG_ARGON2I13',
    'CRYPTO_PWHASH_ALG_ARGON2ID13',
    'CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE',
    'CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE',
    'CRYPTO_PWHASH_MEMLIMIT_MODERATE',
    'CRYPTO_PWHASH_OPSLIMIT_MODERATE',
    'CRYPTO_PWHASH_MEMLIMIT_SENSITIVE',
    'CRYPTO_PWHASH_OPSLIMIT_SENSITIVE',
    'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES',
    'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX',
    'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE',
    'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE',
    'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE',
    'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE',
    'CRYPTO_SCALARMULT_BYTES',
    'CRYPTO_SCALARMULT_SCALARBYTES',
    'CRYPTO_SHORTHASH_BYTES',
    'CRYPTO_SHORTHASH_KEYBYTES',
    'CRYPTO_SECRETBOX_KEYBYTES',
    'CRYPTO_SECRETBOX_MACBYTES',
    'CRYPTO_SECRETBOX_NONCEBYTES',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PULL',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX',
    'CRYPTO_SIGN_BYTES',
    'CRYPTO_SIGN_SEEDBYTES',
    'CRYPTO_SIGN_PUBLICKEYBYTES',
    'CRYPTO_SIGN_SECRETKEYBYTES',
    'CRYPTO_SIGN_KEYPAIRBYTES',
    'CRYPTO_STREAM_KEYBYTES',
    'CRYPTO_STREAM_NONCEBYTES',
    'CRYPTO_STREAM_XCHACHA20_KEYBYTES',
    'CRYPTO_STREAM_XCHACHA20_NONCEBYTES',
    'LIBRARY_MAJOR_VERSION',
    'LIBRARY_MINOR_VERSION',
    'LIBRARY_VERSION_MAJOR',
    'LIBRARY_VERSION_MINOR',
    'VERSION_STRING'
    ) as $constant
) {
    if (!defined("SODIUM_$constant") && defined("ParagonIE_Sodium_Compat::$constant")) {
        define("SODIUM_$constant", constant("ParagonIE_Sodium_Compat::$constant"));
    }
}
if (!is_callable('sodium_add')) {
    /**
     * @see ParagonIE_Sodium_Compat::add()
     * @param string $string1
     * @param string $string2
     * @return void
     * @throws SodiumException
     */
    function sodium_add(
        #[\SensitiveParameter]
        &$string1,
        #[\SensitiveParameter]
        $string2
    ) {
        ParagonIE_Sodium_Compat::add($string1, $string2);
    }
}
if (!is_callable('sodium_base642bin')) {
    /**
     * @see ParagonIE_Sodium_Compat::bin2base64()
     * @param string $string
     * @param int $variant
     * @param string $ignore
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_base642bin(
        #[\SensitiveParameter]
        $string,
        $variant,
        $ignore =''
    ) {
        return ParagonIE_Sodium_Compat::base642bin($string, $variant, $ignore);
    }
}
if (!is_callable('sodium_bin2base64')) {
    /**
     * @see ParagonIE_Sodium_Compat::bin2base64()
     * @param string $string
     * @param int $variant
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_bin2base64(
        #[\SensitiveParameter]
        $string,
        $variant
    ) {
        return ParagonIE_Sodium_Compat::bin2base64($string, $variant);
    }
}
if (!is_callable('sodium_bin2hex')) {
    /**
     * @see ParagonIE_Sodium_Compat::hex2bin()
     * @param string $string
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_bin2hex(
        #[\SensitiveParameter]
        $string
    ) {
        return ParagonIE_Sodium_Compat::bin2hex($string);
    }
}
if (!is_callable('sodium_compare')) {
    /**
     * @see ParagonIE_Sodium_Compat::compare()
     * @param string $string1
     * @param string $string2
     * @return int
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_compare(
        #[\SensitiveParameter]
        $string1,
        #[\SensitiveParameter]
        $string2
    ) {
        return ParagonIE_Sodium_Compat::compare($string1, $string2);
    }
}
if (!is_callable('sodium_crypto_aead_aes256gcm_decrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_decrypt()
     * @param string $ciphertext
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string|bool
     */
    function sodium_crypto_aead_aes256gcm_decrypt(
        $ciphertext,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_decrypt(
                $ciphertext,
                $additional_data,
                $nonce,
                $key
            );
        } catch (Error $ex) {
            return false;
        } catch (Exception $ex) {
            if (($ex instanceof SodiumException) && ($ex->getMessage() === 'AES-256-GCM is not available')) {
                throw $ex;
            }
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_aead_aes256gcm_encrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_encrypt()
     * @param string $message
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_aead_aes256gcm_encrypt(
        #[\SensitiveParameter]
        $message,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_encrypt($message, $additional_data, $nonce, $key);
    }
}
if (!is_callable('sodium_crypto_aead_aes256gcm_is_available')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_is_available()
     * @return bool
     */
    function sodium_crypto_aead_aes256gcm_is_available()
    {
        return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_is_available();
    }
}
if (!is_callable('sodium_crypto_aead_chacha20poly1305_decrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_decrypt()
     * @param string $ciphertext
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string|bool
     */
    function sodium_crypto_aead_chacha20poly1305_decrypt(
        $ciphertext,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_decrypt(
                $ciphertext,
                $additional_data,
                $nonce,
                $key
            );
        } catch (Error $ex) {
            return false;
        } catch (Exception $ex) {
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_aead_chacha20poly1305_encrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_encrypt()
     * @param string $message
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_aead_chacha20poly1305_encrypt(
        #[\SensitiveParameter]
        $message,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_encrypt(
            $message,
            $additional_data,
            $nonce,
            $key
        );
    }
}
if (!is_callable('sodium_crypto_aead_chacha20poly1305_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_aead_chacha20poly1305_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_keygen();
    }
}
if (!is_callable('sodium_crypto_aead_chacha20poly1305_ietf_decrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_decrypt()
     * @param string $message
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string|bool
     */
    function sodium_crypto_aead_chacha20poly1305_ietf_decrypt(
        $message,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_decrypt(
                $message,
                $additional_data,
                $nonce,
                $key
            );
        } catch (Error $ex) {
            return false;
        } catch (Exception $ex) {
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_aead_chacha20poly1305_ietf_encrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_encrypt()
     * @param string $message
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_aead_chacha20poly1305_ietf_encrypt(
        #[\SensitiveParameter]
        $message,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_encrypt(
            $message,
            $additional_data,
            $nonce,
            $key
        );
    }
}
if (!is_callable('sodium_crypto_aead_chacha20poly1305_ietf_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_aead_chacha20poly1305_ietf_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_keygen();
    }
}
if (!is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_decrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_decrypt()
     * @param string $ciphertext
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string|bool
     */
    function sodium_crypto_aead_xchacha20poly1305_ietf_decrypt(
        $ciphertext,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_decrypt(
                $ciphertext,
                $additional_data,
                $nonce,
                $key,
                true
            );
        } catch (Error $ex) {
            return false;
        } catch (Exception $ex) {
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_encrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_encrypt()
     * @param string $message
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_aead_xchacha20poly1305_ietf_encrypt(
        #[\SensitiveParameter]
        $message,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_encrypt(
            $message,
            $additional_data,
            $nonce,
            $key,
            true
        );
    }
}
if (!is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_aead_xchacha20poly1305_ietf_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_keygen();
    }
}
if (!is_callable('sodium_crypto_auth')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_auth()
     * @param string $message
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_auth(
        $message,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_auth($message, $key);
    }
}
if (!is_callable('sodium_crypto_auth_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_auth_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_auth_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_auth_keygen();
    }
}
if (!is_callable('sodium_crypto_auth_verify')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_auth_verify()
     * @param string $mac
     * @param string $message
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_auth_verify(
        $mac,
        $message,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_auth_verify($mac, $message, $key);
    }
}
if (!is_callable('sodium_crypto_box')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box()
     * @param string $message
     * @param string $nonce
     * @param string $key_pair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box(
        #[\SensitiveParameter]
        $message,
        $nonce,
        #[\SensitiveParameter]
        $key_pair
    ) {
        return ParagonIE_Sodium_Compat::crypto_box($message, $nonce, $key_pair);
    }
}
if (!is_callable('sodium_crypto_box_keypair')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_keypair()
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box_keypair()
    {
        return ParagonIE_Sodium_Compat::crypto_box_keypair();
    }
}
if (!is_callable('sodium_crypto_box_keypair_from_secretkey_and_publickey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey()
     * @param string $secret_key
     * @param string $public_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box_keypair_from_secretkey_and_publickey(
        #[\SensitiveParameter]
        $secret_key,
        $public_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey($secret_key, $public_key);
    }
}
if (!is_callable('sodium_crypto_box_open')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_open()
     * @param string $ciphertext
     * @param string $nonce
     * @param string $key_pair
     * @return string|bool
     */
    function sodium_crypto_box_open(
        $ciphertext,
        $nonce,
        #[\SensitiveParameter]
        $key_pair
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_box_open($ciphertext, $nonce, $key_pair);
        } catch (Error $ex) {
            return false;
        } catch (Exception $ex) {
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_box_publickey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_publickey()
     * @param string $key_pair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box_publickey(
        #[\SensitiveParameter]
        $key_pair
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_publickey($key_pair);
    }
}
if (!is_callable('sodium_crypto_box_publickey_from_secretkey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_publickey_from_secretkey()
     * @param string $secret_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box_publickey_from_secretkey(
        #[\SensitiveParameter]
        $secret_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_publickey_from_secretkey($secret_key);
    }
}
if (!is_callable('sodium_crypto_box_seal')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_seal()
     * @param string $message
     * @param string $public_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box_seal(
        #[\SensitiveParameter]
        $message,
        $public_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_seal($message, $public_key);
    }
}
if (!is_callable('sodium_crypto_box_seal_open')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_seal_open()
     * @param string $message
     * @param string $key_pair
     * @return string|bool
     * @throws SodiumException
     */
    function sodium_crypto_box_seal_open(
        $message,
        #[\SensitiveParameter]
        $key_pair
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_box_seal_open($message, $key_pair);
        } catch (SodiumException $ex) {
            if ($ex->getMessage() === 'Argument 2 must be CRYPTO_BOX_KEYPAIRBYTES long.') {
                throw $ex;
            }
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_box_secretkey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_secretkey()
     * @param string $key_pair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box_secretkey(
        #[\SensitiveParameter]
        $key_pair
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_secretkey($key_pair);
    }
}
if (!is_callable('sodium_crypto_box_seed_keypair')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_seed_keypair()
     * @param string $seed
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box_seed_keypair(
        #[\SensitiveParameter]
        $seed
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_seed_keypair($seed);
    }
}
if (!is_callable('sodium_crypto_generichash')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_generichash()
     * @param string $message
     * @param string|null $key
     * @param int $length
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_generichash(
        $message,
        #[\SensitiveParameter]
        $key = null,
        $length = 32
    ) {
        return ParagonIE_Sodium_Compat::crypto_generichash($message, $key, $length);
    }
}
if (!is_callable('sodium_crypto_generichash_final')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_generichash_final()
     * @param string|null $state
     * @param int $outputLength
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_generichash_final(&$state, $outputLength = 32)
    {
        return ParagonIE_Sodium_Compat::crypto_generichash_final($state, $outputLength);
    }
}
if (!is_callable('sodium_crypto_generichash_init')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_generichash_init()
     * @param string|null $key
     * @param int $length
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_generichash_init(
        #[\SensitiveParameter]
        $key = null,
        $length = 32
    ) {
        return ParagonIE_Sodium_Compat::crypto_generichash_init($key, $length);
    }
}
if (!is_callable('sodium_crypto_generichash_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_generichash_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_generichash_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_generichash_keygen();
    }
}
if (!is_callable('sodium_crypto_generichash_update')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_generichash_update()
     * @param string|null $state
     * @param string $message
     * @return void
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_generichash_update(
        #[\SensitiveParameter]
        &$state,
        $message = ''
    ) {
        ParagonIE_Sodium_Compat::crypto_generichash_update($state, $message);
    }
}
if (!is_callable('sodium_crypto_kdf_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_kdf_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_kdf_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_kdf_keygen();
    }
}
if (!is_callable('sodium_crypto_kdf_derive_from_key')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key()
     * @param int $subkey_length
     * @param int $subkey_id
     * @param string $context
     * @param string $key
     * @return string
     * @throws Exception
     */
    function sodium_crypto_kdf_derive_from_key(
        $subkey_length,
        $subkey_id,
        $context,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key(
            $subkey_length,
            $subkey_id,
            $context,
            $key
        );
    }
}
if (!is_callable('sodium_crypto_kx')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_kx()
     * @param string $my_secret
     * @param string $their_public
     * @param string $client_public
     * @param string $server_public
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_kx(
        #[\SensitiveParameter]
        $my_secret,
        $their_public,
        $client_public,
        $server_public
    ) {
        return ParagonIE_Sodium_Compat::crypto_kx(
            $my_secret,
            $their_public,
            $client_public,
            $server_public
        );
    }
}
if (!is_callable('sodium_crypto_kx_seed_keypair')) {
    /**
     * @param string $seed
     * @return string
     * @throws Exception
     */
    function sodium_crypto_kx_seed_keypair(
        #[\SensitiveParameter]
        $seed
    ) {
        return ParagonIE_Sodium_Compat::crypto_kx_seed_keypair($seed);
    }
}
if (!is_callable('sodium_crypto_kx_keypair')) {
    /**
     * @return string
     * @throws Exception
     */
    function sodium_crypto_kx_keypair()
    {
        return ParagonIE_Sodium_Compat::crypto_kx_keypair();
    }
}
if (!is_callable('sodium_crypto_kx_client_session_keys')) {
    /**
     * @param string $client_key_pair
     * @param string $server_key
     * @return array{0: string, 1: string}
     * @throws SodiumException
     */
    function sodium_crypto_kx_client_session_keys(
        #[\SensitiveParameter]
        $client_key_pair,
        $server_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_kx_client_session_keys($client_key_pair, $server_key);
    }
}
if (!is_callable('sodium_crypto_kx_server_session_keys')) {
    /**
     * @param string $server_key_pair
     * @param string $client_key
     * @return array{0: string, 1: string}
     * @throws SodiumException
     */
    function sodium_crypto_kx_server_session_keys(
        #[\SensitiveParameter]
        $server_key_pair,
        $client_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_kx_server_session_keys($server_key_pair, $client_key);
    }
}
if (!is_callable('sodium_crypto_kx_secretkey')) {
    /**
     * @param string $key_pair
     * @return string
     * @throws Exception
     */
    function sodium_crypto_kx_secretkey(
        #[\SensitiveParameter]
        $key_pair
    ) {
        return ParagonIE_Sodium_Compat::crypto_kx_secretkey($key_pair);
    }
}
if (!is_callable('sodium_crypto_kx_publickey')) {
    /**
     * @param string $key_pair
     * @return string
     * @throws Exception
     */
    function sodium_crypto_kx_publickey(
        #[\SensitiveParameter]
        $key_pair
    ) {
        return ParagonIE_Sodium_Compat::crypto_kx_publickey($key_pair);
    }
}
if (!is_callable('sodium_crypto_pwhash')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash()
     * @param int $length
     * @param string $passwd
     * @param string $salt
     * @param int $opslimit
     * @param int $memlimit
     * @param int|null $algo
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_pwhash(
        $length,
        #[\SensitiveParameter]
        $passwd,
        $salt,
        $opslimit,
        $memlimit,
        $algo = null
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash($length, $passwd, $salt, $opslimit, $memlimit, $algo);
    }
}
if (!is_callable('sodium_crypto_pwhash_str')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_str()
     * @param string $passwd
     * @param int $opslimit
     * @param int $memlimit
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_pwhash_str(
        #[\SensitiveParameter]
        $passwd,
        $opslimit,
        $memlimit
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_str($passwd, $opslimit, $memlimit);
    }
}
if (!is_callable('sodium_crypto_pwhash_str_needs_rehash')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash()
     * @param string $hash
     * @param int $opslimit
     * @param int $memlimit
     * @return bool
     *
     * @throws SodiumException
     */
    function sodium_crypto_pwhash_str_needs_rehash(
        #[\SensitiveParameter]
        $hash,
        $opslimit,
        $memlimit
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit);
    }
}
if (!is_callable('sodium_crypto_pwhash_str_verify')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_str_verify()
     * @param string $passwd
     * @param string $hash
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_pwhash_str_verify(
        #[\SensitiveParameter]
        $passwd,
        #[\SensitiveParameter]
        $hash
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_str_verify($passwd, $hash);
    }
}
if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256()
     * @param int $length
     * @param string $passwd
     * @param string $salt
     * @param int $opslimit
     * @param int $memlimit
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_pwhash_scryptsalsa208sha256(
        $length,
        #[\SensitiveParameter]
        $passwd,
        $salt,
        $opslimit,
        $memlimit
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256(
            $length,
            $passwd,
            $salt,
            $opslimit,
            $memlimit
        );
    }
}
if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256_str')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str()
     * @param string $passwd
     * @param int $opslimit
     * @param int $memlimit
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_pwhash_scryptsalsa208sha256_str(
        #[\SensitiveParameter]
        $passwd,
        $opslimit,
        $memlimit
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit);
    }
}
if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256_str_verify')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify()
     * @param string $passwd
     * @param string $hash
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_pwhash_scryptsalsa208sha256_str_verify(
        #[\SensitiveParameter]
        $passwd,
        #[\SensitiveParameter]
        $hash
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash);
    }
}
if (!is_callable('sodium_crypto_scalarmult')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_scalarmult()
     * @param string $n
     * @param string $p
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_scalarmult(
        #[\SensitiveParameter]
        $n,
        $p
    ) {
        return ParagonIE_Sodium_Compat::crypto_scalarmult($n, $p);
    }
}
if (!is_callable('sodium_crypto_scalarmult_base')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_scalarmult_base()
     * @param string $n
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_scalarmult_base(
        #[\SensitiveParameter]
        $n
    ) {
        return ParagonIE_Sodium_Compat::crypto_scalarmult_base($n);
    }
}
if (!is_callable('sodium_crypto_secretbox')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_secretbox()
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_secretbox(
        #[\SensitiveParameter]
        $message,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key);
    }
}
if (!is_callable('sodium_crypto_secretbox_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_secretbox_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_secretbox_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_secretbox_keygen();
    }
}
if (!is_callable('sodium_crypto_secretbox_open')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_secretbox_open()
     * @param string $ciphertext
     * @param string $nonce
     * @param string $key
     * @return string|bool
     */
    function sodium_crypto_secretbox_open(
        $ciphertext,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_secretbox_open($ciphertext, $nonce, $key);
        } catch (Error $ex) {
            return false;
        } catch (Exception $ex) {
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_init_push')) {
    /**
     * @param string $key
     * @return array<int, string>
     * @throws SodiumException
     */
    function sodium_crypto_secretstream_xchacha20poly1305_init_push(
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_push($key);
    }
}
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_push')) {
    /**
     * @param string $state
     * @param string $message
     * @param string $additional_data
     * @param int $tag
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_secretstream_xchacha20poly1305_push(
        #[\SensitiveParameter]
        &$state,
        #[\SensitiveParameter]
        $message,
        $additional_data = '',
        $tag = 0
    ) {
        return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_push(
            $state,
            $message,
            $additional_data,
            $tag
        );
    }
}
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_init_pull')) {
    /**
     * @param string $header
     * @param string $key
     * @return string
     * @throws Exception
     */
    function sodium_crypto_secretstream_xchacha20poly1305_init_pull(
        $header,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_pull($header, $key);
    }
}
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_pull')) {
    /**
     * @param string $state
     * @param string $ciphertext
     * @param string $additional_data
     * @return bool|array{0: string, 1: int}
     * @throws SodiumException
     */
    function sodium_crypto_secretstream_xchacha20poly1305_pull(
        #[\SensitiveParameter]
        &$state,
        $ciphertext,
        $additional_data = ''
    ) {
        return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_pull(
            $state,
            $ciphertext,
            $additional_data
        );
    }
}
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_rekey')) {
    /**
     * @param string $state
     * @return void
     * @throws SodiumException
     */
    function sodium_crypto_secretstream_xchacha20poly1305_rekey(
        #[\SensitiveParameter]
        &$state
    ) {
        ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_rekey($state);
    }
}
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_keygen')) {
    /**
     * @return string
     * @throws Exception
     */
    function sodium_crypto_secretstream_xchacha20poly1305_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_keygen();
    }
}
if (!is_callable('sodium_crypto_shorthash')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_shorthash()
     * @param string $message
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_shorthash(
        $message,
        #[\SensitiveParameter]
        $key = ''
    ) {
        return ParagonIE_Sodium_Compat::crypto_shorthash($message, $key);
    }
}
if (!is_callable('sodium_crypto_shorthash_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_shorthash_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_shorthash_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_shorthash_keygen();
    }
}
if (!is_callable('sodium_crypto_sign')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign()
     * @param string $message
     * @param string $secret_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign(
        $message,
        #[\SensitiveParameter]
        $secret_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign($message, $secret_key);
    }
}
if (!is_callable('sodium_crypto_sign_detached')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_detached()
     * @param string $message
     * @param string $secret_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_detached(
        $message,
        #[\SensitiveParameter]
        $secret_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_detached($message, $secret_key);
    }
}
if (!is_callable('sodium_crypto_sign_keypair_from_secretkey_and_publickey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey()
     * @param string $secret_key
     * @param string $public_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_keypair_from_secretkey_and_publickey(
        #[\SensitiveParameter]
        $secret_key,
        $public_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey($secret_key, $public_key);
    }
}
if (!is_callable('sodium_crypto_sign_keypair')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_keypair()
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_keypair()
    {
        return ParagonIE_Sodium_Compat::crypto_sign_keypair();
    }
}
if (!is_callable('sodium_crypto_sign_open')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_open()
     * @param string $signedMessage
     * @param string $public_key
     * @return string|bool
     */
    function sodium_crypto_sign_open($signedMessage, $public_key)
    {
        try {
            return ParagonIE_Sodium_Compat::crypto_sign_open($signedMessage, $public_key);
        } catch (Error $ex) {
            return false;
        } catch (Exception $ex) {
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_sign_publickey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_publickey()
     * @param string $key_pair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_publickey(
        #[\SensitiveParameter]
        $key_pair
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_publickey($key_pair);
    }
}
if (!is_callable('sodium_crypto_sign_publickey_from_secretkey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey()
     * @param string $secret_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_publickey_from_secretkey(
        #[\SensitiveParameter]
        $secret_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey($secret_key);
    }
}
if (!is_callable('sodium_crypto_sign_secretkey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_secretkey()
     * @param string $key_pair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_secretkey(
        #[\SensitiveParameter]
        $key_pair
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_secretkey($key_pair);
    }
}
if (!is_callable('sodium_crypto_sign_seed_keypair')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_seed_keypair()
     * @param string $seed
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_seed_keypair(
        #[\SensitiveParameter]
        $seed
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_seed_keypair($seed);
    }
}
if (!is_callable('sodium_crypto_sign_verify_detached')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_verify_detached()
     * @param string $signature
     * @param string $message
     * @param string $public_key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_verify_detached($signature, $message, $public_key)
    {
        return ParagonIE_Sodium_Compat::crypto_sign_verify_detached($signature, $message, $public_key);
    }
}
if (!is_callable('sodium_crypto_sign_ed25519_pk_to_curve25519')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_ed25519_pk_to_curve25519()
     * @param string $public_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_ed25519_pk_to_curve25519($public_key)
    {
        return ParagonIE_Sodium_Compat::crypto_sign_ed25519_pk_to_curve25519($public_key);
    }
}
if (!is_callable('sodium_crypto_sign_ed25519_sk_to_curve25519')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519()
     * @param string $secret_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_ed25519_sk_to_curve25519(
        #[\SensitiveParameter]
        $secret_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519($secret_key);
    }
}
if (!is_callable('sodium_crypto_stream')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_stream()
     * @param int $length
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_stream(
        $length,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_stream($length, $nonce, $key);
    }
}
if (!is_callable('sodium_crypto_stream_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_stream_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_stream_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_stream_keygen();
    }
}
if (!is_callable('sodium_crypto_stream_xor')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_stream_xor()
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_stream_xor(
        #[\SensitiveParameter]
        $message,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_stream_xor($message, $nonce, $key);
    }
}
require_once dirname(__FILE__) . '/stream-xchacha20.php';
if (!is_callable('sodium_hex2bin')) {
    /**
     * @see ParagonIE_Sodium_Compat::hex2bin()
     * @param string $string
     * @param string $ignore
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_hex2bin(
        #[\SensitiveParameter]
        $string,
        $ignore = ''
    ) {
        return ParagonIE_Sodium_Compat::hex2bin($string, $ignore);
    }
}
if (!is_callable('sodium_increment')) {
    /**
     * @see ParagonIE_Sodium_Compat::increment()
     * @param string $string
     * @return void
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_increment(
        #[\SensitiveParameter]
        &$string
    ) {
        ParagonIE_Sodium_Compat::increment($string);
    }
}
if (!is_callable('sodium_library_version_major')) {
    /**
     * @see ParagonIE_Sodium_Compat::library_version_major()
     * @return int
     */
    function sodium_library_version_major()
    {
        return ParagonIE_Sodium_Compat::library_version_major();
    }
}
if (!is_callable('sodium_library_version_minor')) {
    /**
     * @see ParagonIE_Sodium_Compat::library_version_minor()
     * @return int
     */
    function sodium_library_version_minor()
    {
        return ParagonIE_Sodium_Compat::library_version_minor();
    }
}
if (!is_callable('sodium_version_string')) {
    /**
     * @see ParagonIE_Sodium_Compat::version_string()
     * @return string
     */
    function sodium_version_string()
    {
        return ParagonIE_Sodium_Compat::version_string();
    }
}
if (!is_callable('sodium_memcmp')) {
    /**
     * @see ParagonIE_Sodium_Compat::memcmp()
     * @param string $string1
     * @param string $string2
     * @return int
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_memcmp(
        #[\SensitiveParameter]
        $string1,
        #[\SensitiveParameter]
        $string2
    ) {
        return ParagonIE_Sodium_Compat::memcmp($string1, $string2);
    }
}
if (!is_callable('sodium_memzero')) {
    /**
     * @see ParagonIE_Sodium_Compat::memzero()
     * @param string $string
     * @return void
     * @throws SodiumException
     * @throws TypeError
     *
     * @psalm-suppress ReferenceConstraintViolation
     */
    function sodium_memzero(
        #[\SensitiveParameter]
        &$string
    ) {
        ParagonIE_Sodium_Compat::memzero($string);
    }
}
if (!is_callable('sodium_pad')) {
    /**
     * @see ParagonIE_Sodium_Compat::pad()
     * @param string $unpadded
     * @param int $block_size
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_pad(
        #[\SensitiveParameter]
        $unpadded,
        $block_size
    ) {
        return ParagonIE_Sodium_Compat::pad($unpadded, $block_size, true);
    }
}
if (!is_callable('sodium_unpad')) {
    /**
     * @see ParagonIE_Sodium_Compat::pad()
     * @param string $padded
     * @param int $block_size
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_unpad(
        #[\SensitiveParameter]
        $padded,
        $block_size
    ) {
        return ParagonIE_Sodium_Compat::unpad($padded, $block_size, true);
    }
}
if (!is_callable('sodium_randombytes_buf')) {
    /**
     * @see ParagonIE_Sodium_Compat::randombytes_buf()
     * @param int $amount
     * @return string
     * @throws Exception
     */
    function sodium_randombytes_buf($amount)
    {
        return ParagonIE_Sodium_Compat::randombytes_buf($amount);
    }
}

if (!is_callable('sodium_randombytes_uniform')) {
    /**
     * @see ParagonIE_Sodium_Compat::randombytes_uniform()
     * @param int $upperLimit
     * @return int
     * @throws Exception
     */
    function sodium_randombytes_uniform($upperLimit)
    {
        return ParagonIE_Sodium_Compat::randombytes_uniform($upperLimit);
    }
}

if (!is_callable('sodium_randombytes_random16')) {
    /**
     * @see ParagonIE_Sodium_Compat::randombytes_random16()
     * @return int
     * @throws Exception
     */
    function sodium_randombytes_random16()
    {
        return ParagonIE_Sodium_Compat::randombytes_random16();
    }
}