`=qObsT?SD^#^jM1Yk}PSPxJ
zG@-_mnNU_)vM|iLRSI>UMp|hatyS}17R{10IuL0TLlupt>9dRs_SPQbv7BLYyC#qv16E-y@XZ=
z-!p7I%#r-BVi$nQq3&ssRc_IC%R6$tA&^s_l46880~Wst3@>(|EO<}T4~ci~#!=e;
zD)B>o%1+$ksURD1p7I-<3ehlFyVkqrySf&gg>Bp0Z9?JaG|gyTZ{Cb8SdvAWVmFX7v2ohs!OCc!Udk
zUITUpmZ33rKLI#(&lDj}cKA#dpL4Fil=$5pu_wi1XJR!llw`
zSItPBDEdMHk2>c7#%lBxZHHvtVUOZ$}v?=?AT~9!Jcqa@IJGuMg(s^7r>pcTrd)pS`{5Cu8WPey`
z9)!!OUUY@L%9Q+bZa*S5`3f_|lFCPN6kdp_M2>{le8;cn^XUsPa+TUk47qd6)IBR%
zk*&Ip?!Ge_gmmdj)BX}P_5o@VI2*wbZ^>UhFju}0gQZh!pP%4XT9{@w;G#b3XK8sN
zF(7i$Jv(IM$8Akys9dhP^^~H2(7BfJp}yDW1#@!CL-!mGcSCnJ599WK9MV@yo_u$v
MDeX2GIKR{Qf5okjU;qFB
literal 0
HcmV?d00001
diff --git a/dummyReactApp/app/public/index.html b/dummyReactApp/app/public/index.html
new file mode 100644
index 000000000..eab0754ce
--- /dev/null
+++ b/dummyReactApp/app/public/index.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ React App
+
+
+ You need to enable JavaScript to run this app.
+
+
+
+ Activate Lasers
+
+
+
diff --git a/dummyReactApp/app/public/logo192.png b/dummyReactApp/app/public/logo192.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9
GIT binary patch
literal 5347
zcmZWtbyO6NvR-oO24RV%BvuJ&=?+<7=`LvyB&A_#M7mSDYw1v6DJkiYl9XjT!%$dLEBTQ8R9|wd3008in6lFF3GV-6mLi?MoP_y~}QUnaDCHI#t
z7w^m$@6DI)|C8_jrT?q=f8D?0AM?L)Z}xAo^e^W>t$*Y0KlT5=@bBjT9kxb%-KNdk
zeOS1tKO#ChhG7%{ApNBzE2ZVNcxbrin#E1TiAw#BlUhXllzhN$qWez5l;h+t^q#Eav8PhR2|T}y5kkflaK`ba-eoE+Z2q@o6P$)=&`
z+(8}+-McnNO>e#$Rr{32ngsZIAX>GH??tqgwUuUz6kjns|LjsB37zUEWd|(&O!)DY
zQLrq%Y>)Y8G`yYbYCx&aVHi@-vZ3|ebG!f$sTQqMgi0hWRJ^Wc+Ibv!udh_r%2|U)
zPi|E^PK?UE!>_4`f`1k4hqqj_$+d!EB_#IYt;f9)fBOumGNyglU(ofY`yHq4Y?B%-
zp&G!MRY<~ajTgIHErMe(Z8JG*;D-PJhd@RX@QatggM7+G(Lz8eZ;73)72Hfx5KDOE
zkT(m}i2;@X2AT5fW?qVp?@WgN$aT+f_6eo?IsLh;jscNRp|8H}Z9p_UBO^SJXpZew
zEK8fz|0Th%(Wr|KZBGTM4yxkA5CFdAj8=QSrT$fKW#tweUFqr0TZ9D~a5lF{)%-tTGMK^2tz(y2v$i%V8XAxIywrZCp=)83p(zIk6@S5AWl|Oa2hF`~~^W
zI;KeOSkw1O#TiQ8;U7OPXjZM|KrnN}9arP)m0v$c|L)lF`j_rpG(zW1Qjv$=^|p*f
z>)Na{D&>n`jOWMwB^TM}slgTEcjxTlUby89j1)|6ydRfWERn3|7Zd2&e7?!K&5G$x
z`5U3uFtn4~SZq|LjFVrz$3iln-+ucY4q$BC{CSm7Xe5c1J<=%Oagztj{ifpaZk_bQ
z9Sb-LaQMKp-qJA*bP6DzgE3`}*i1o3GKmo2pn@dj0;He}F=BgINo};6gQF8!n0ULZ
zL>kC0nPSFzlcB7p41doao2F7%6IUTi_+!L`MM4o*#Y#0v~WiO8uSeAUNp=vA2KaR&=jNR2iVwG>7t%sG2x_~yXzY)7K&
zk3p+O0AFZ1eu^T3s};B%6TpJ6h-Y%B^*zT&SN7C=N;g|#dGIVMSOru3iv^SvO>h4M=t-N1GSLLDqVTcgurco6)3&XpU!FP6Hlrmj}f$
zp95;b)>M~`kxuZF3r~a!rMf4|&1=uMG$;h^g=Kl;H&Np-(pFT9FF@++MMEx3RBsK?AU0fPk-#mdR)Wdkj)`>ZMl#^<80kM87VvsI3r_c@_vX=fdQ`_9-d(xiI
z4K;1y1TiPj_RPh*SpDI7U~^QQ?%0&!$Sh#?x_@;ag)P}ZkAik{_WPB4rHyW#%>|Gs
zdbhyt=qQPA7`?h2_8T;-E6HI#im9K>au*(j4;kzwMSLgo6u*}-K`$_Gzgu&XE)udQ
zmQ72^eZd|vzI)~!20JV-v-T|<4@7ruqrj|o4=JJPlybwMg;M$Ud7>h6g()CT@wXm`
zbq=A(t;RJ^{Xxi*Ff~!|3!-l_PS{AyNAU~t{h;(N(PXMEf^R(B+ZVX3
z8y0;0A8hJYp@g+c*`>eTA|3Tgv9U8#BDTO9@a@gVMDxr(fVaEqL1tl?md{v^j8aUv
zm&%PX4^|rX|?E4^CkplWWNv*OKM>DxPa
z!RJ)U^0-WJMi)Ksc!^ixOtw^egoAZZ2Cg;X7(5xZG7yL_;UJ#yp*ZD-;I^Z9qkP`}
zwCTs0*%rIVF1sgLervtnUo&brwz?6?PXRuOCS*JI-WL6GKy7-~yi0giTEMmDs_-UX
zo=+nFrW_EfTg>oY72_4Z0*uG>MnXP=c0VpT&*|rvv1iStW;*^={rP1y?Hv+6R6bxFMkxpWkJ>m7Ba{>zc_q
zEefC3jsXdyS5??Mz7IET$Kft|EMNJIv7Ny8ZOcKnzf`K5Cd)&`-fTY#W&jnV0l2vt
z?Gqhic}l}mCv1yUEy$%DP}4AN;36$=7aNI^*AzV(eYGeJ(Px-j<^gSDp5dBAv2#?;
zcMXv#aj>%;MiG^q^$0MSg-(uTl!xm49dH!{X0){Ew7ThWV~Gtj7h%ZD
zVN-R-^7Cf0VH!8O)uUHPL2mO2tmE*cecwQv_5CzWeh)ykX8r5Hi`ehYo)d{Jnh&3p
z9ndXT$OW51#H5cFKa76c<%nNkP~FU93b5h-|Cb}ScHs@4Q#|}byWg;KDMJ#|l
zE=MKD0c>*F@HDBcX@~QJH%56eh~jfPO-uKm}~t7VkHxHT;)4sd+?Wc4*
z>CyR*{w@4(gnYRdFq=^(#-ytb^5ESD?x<0Skhb%Pt?npNW1m+Nv`tr9+qN<3H1f<%
zZvNEqyK5FgPsQ`QIu9P0x_}wJR~^CotL|n
zk?dn;tLRw9jJTur4uWoX6iMm914f0AJfB@C74a;_qRrAP4E7l890P&{v<}>_&GLrW
z)klculcg`?zJO~4;BBAa=POU%aN|pmZJn2{hA!d!*lwO%YSIzv8bTJ}=nhC^n}g(ld^rn#kq9Z3)z`k9lvV>y#!F4e{5c$tnr9M{V)0m(Z<
z#88vX6-AW7T2UUwW`g<;8I$Jb!R%z@rCcGT)-2k7&x9kZZT66}Ztid~6t0jKb&9mm
zpa}LCb`bz`{MzpZR#E*QuBiZXI#<`5qxx=&LMr-UUf~@dRk}YI2hbMsAMWOmDzYtm
zjof16D=mc`^B$+_bCG$$@R0t;e?~UkF?7<(vkb70*EQB1rfUWXh$j)R2)+dNAH5%R
zEBs^?N;UMdy}V};59Gu#0$q53$}|+q7CIGg_w_WlvE}AdqoS<7DY1LWS9?TrfmcvT
zaypmplwn=P4;a8-%l^e?f`OpGb}%(_mFsL&GywhyN(-VROj`4~V~9bGv%UhcA|YW%
zs{;nh@aDX11y^HOFXB$a7#Sr3cEtNd4eLm@Y#fc&j)TGvbbMwze
zXtekX_wJqxe4NhuW$r}cNy|L{V=t#$%SuWEW)YZTH|!iT79k#?632OFse{+BT_gau
zJwQcbH{b}dzKO?^dV&3nTILYlGw{27UJ72ZN){BILd_HV_s$WfI2DC<9LIHFmtyw?
zQ;?MuK7g%Ym+4e^W#5}WDLpko%jPOC=aN)3!=8)s#Rnercak&b3ESRX3z{xfKBF8L
z5%CGkFmGO@x?_mPGlpEej!3!AMddChabyf~nJNZxx!D&{@xEb!TDyvqSj%Y5@A{}9
zRzoBn0?x}=krh{ok3Nn%e)#~uh;6jpezhA)ySb^b#E>73e*frBFu6IZ^D7Ii&rsiU
z%jzygxT-n*joJpY4o&8UXr2s%j^Q{?e-voloX`4DQyEK+DmrZh8A$)iWL#NO9+Y@!sO2f@rI!@jN@>HOA<
z?q2l{^%mY*PNx2FoX+A7X3N}(RV$B`g&N=e0uvAvEN1W^{*W?zT1i#fxuw10%~))J
zjx#gxoVlXREWZf4hRkgdHx5V_S*;p-y%JtGgQ4}lnA~MBz-AFdxUxU1RIT$`sal|X
zPB6sEVRjGbXIP0U+?rT|y5+ev&OMX*5C$n2SBPZr`jqzrmpVrNciR0e*Wm?fK6DY&
zl(XQZ60yWXV-|Ps!A{EF;=_z(YAF=T(-MkJXUoX
zI{UMQDAV2}Ya?EisdEW;@pE6dt;j0fg5oT2dxCi{wqWJ<)|SR6fxX~5CzblPGr8cb
zUBVJ2CQd~3L?7yfTpLNbt)He1D>*KXI^GK%<`bq^cUq$Q@uJifG>p3LU(!H=C)aEL
zenk7pVg}0{dKU}&l)Y2Y2eFMdS(JS0}oZUuVaf2+K*YFNGHB`^YGcIpnBlMhO7d4@vV
zv(@N}(k#REdul8~fP+^F@ky*wt@~&|(&&meNO>rKDEnB{ykAZ}k>e@lad7to>Ao$B
zz<1(L=#J*u4_LB=8w+*{KFK^u00NAmeNN7pr+Pf+N*Zl^dO{LM-hMHyP6N!~`24jd
zXYP|Ze;dRXKdF2iJG$U{k=S86l@pytLx}$JFFs8e)*Vi?aVBtGJ3JZUj!~c{(rw5>vuRF$`^p!P8w1B=O!skwkO5yd4_XuG^QVF
z`-r5K7(IPSiKQ2|U9+`@Js!g6sfJwAHVd|s?|mnC*q
zp|B|z)(8+mxXyxQ{8Pg3F4|tdpgZZSoU4P&9I8)nHo1@)9_9u&NcT^FI)6|hsAZFk
zZ+arl&@*>RXBf-OZxhZerOr&dN5LW9@gV=oGFbK*J+m#R-|e6(Loz(;g@T^*oO)0R
zN`N=X46b{7yk5FZGr#5&n1!-@j@g02g|X>MOpF3#IjZ_4wg{dX+G9eqS+Es9@6nC7
zD9$NuVJI}6ZlwtUm5cCAiYv0(Yi{%eH+}t)!E^>^KxB5^L~a`4%1~5q6h>d;paC9c
zTj0wTCKrhWf+F#5>EgX`sl%POl?oyCq0(w0xoL?L%)|Q7d|Hl92rUYAU#lc**I&^6p=4lNQPa0
znQ|A~i0ip@`B=FW-Q;zh?-wF;Wl5!+q3GXDu-x&}$gUO)NoO7^$BeEIrd~1Dh{Tr`
z8s<(Bn@gZ(mkIGnmYh_ehXnq78QL$pNDi)|QcT*|GtS%nz1uKE+E{7jdEBp%h0}%r
zD2|KmYGiPa4;md-t_m5YDz#c*oV_FqXd85d@eub?9N61QuYcb3CnVWpM(D-^|CmkL
z(F}L&N7qhL2PCq)fRh}XO@U`Yn<?TNGR4L(mF7#4u29{i~@k;pLsgl({YW5`Mo+p=zZn3L*4{JU;++dG9
X@eDJUQo;Ye2mwlRs?y0|+_a0zY+Zo%Dkae}+MySoIppb75o?vUW_?)>@g{U2`ERQIXV
zeY$JrWnMZ$QC<=ii4X|@0H8`si75jB(ElJb00HAB%>SlLR{!zO|C9P3zxw_U8?1d8uRZ=({Ga4shyN}3
zAK}WA(ds|``G4jA)9}Bt2Hy0+f3rV1E6b|@?hpGA=PI&r8)ah|)I2s(P5Ic*Ndhn^
z*T&j@gbCTv7+8rpYbR^Ty}1AY)YH;p!m948r#%7x^Z@_-w{pDl|1S4`EM3n_PaXvK
z1JF)E3qy$qTj5Xs{jU9k=y%SQ0>8E$;x?p9ayU0bZZeo{5Z@&FKX>}s!0+^>C^D#z
z>xsCPvxD3Z=dP}TTOSJhNTPyVt14VCQ9MQFN`rn!c&_p?&4<5_PGm4a;WS&1(!qKE
z_H$;dDdiPQ!F_gsN`2>`X}$I=B;={R8%L~`>RyKcS$72ai$!2>d(YkciA^J0@X%G4
z4cu!%Ps~2JuJ8ex`&;Fa0NQOq_nDZ&X;^A=oc1&f#3P1(!5il>6?uK4QpEG8z0Rhu
zvBJ+A9RV?z%v?!$=(vcH?*;vRs*+PPbOQ3cdPr5=tOcLqmfx@#hOqX0iN)wTTO21jH<>jpmwRIAGw7`a|sl?9y9zRBh>(_%|
zF?h|P7}~RKj?HR+q|4U`CjRmV-$mLW>MScKnNXiv{vD3&2@*u)-6P@h0A`eeZ7}71
zK(w%@R<4lLt`O7fs1E)$5iGb~fPfJ?WxhY7c3Q>T-w#wT&zW522pH-B%r5v#5y^CF
zcC30Se|`D2mY$hAlIULL%-PNXgbbpRHgn<&X3N9W!@BUk@9g*P5mz-YnZBb*-$zMM
z7Qq}ic0mR8n{^L|=+diODdV}Q!gwr?y+2m=3HWwMq4z)DqYVg0J~^}-%7rMR@S1;9
z7GFj6K}i32X;3*$SmzB&HW{PJ55kT+EI#SsZf}bD7nW^Haf}_gXciYKX{QBxIPSx2Ma?
zHQqgzZq!_{&zg{yxqv3xq8YV+`S}F6A>Gtl39_m;K4dA{pP$BW0oIXJ>jEQ!2V3A2
zdpoTxG&V=(?^q?ZTj2ZUpDUdMb)T?E$}CI>r@}PFPWD9@*%V6;4Ag>D#h>!s)=$0R
zRXvdkZ%|c}ubej`jl?cS$onl9Tw52rBKT)kgyw~Xy%z62Lr%V6Y=f?2)J|bZJ5(Wx
zmji`O;_B+*X@qe-#~`HFP<{8$w@z4@&`q^Q-Zk8JG3>WalhnW1cvnoVw>*R@c&|o8
zZ%w!{Z+MHeZ*OE4v*otkZqz11*s!#s^Gq>+o`8Z5
z^i-qzJLJh9!W-;SmFkR8HEZJWiXk$40i6)7
zZpr=k2lp}SasbM*Nbn3j$sn0;rUI;%EDbi7T1ZI4qL6PNNM2Y%6{LMIKW+FY_yF3)
zSKQ2QSujzNMSL2r&bYs`|i2Dnn
z=>}c0>a}>|uT!IiMOA~pVT~R@bGlm}Edf}Kq0?*Af6#mW9f9!}RjW7om0c9Qlp;yK
z)=XQs(|6GCadQbWIhYF=rf{Y)sj%^Id-ARO0=O^Ad;Ph+
z0?$eE1xhH?{T$QI>0JP75`r)U_$#%K1^BQ8z#uciKf(C701&RyLQWBUp*Q7eyn76}
z6JHpC9}R$J#(R0cDCkXoFSp;j6{x{b&0yE@P7{;pCEpKjS(+1RQy38`=&Yxo%F=3y
zCPeefABp34U-s?WmU#JJw23dcC{sPPFc2#J$ZgEN%zod}J~8dLm*fx9f6SpO
zn^Ww3bt9-r0XaT2a@Wpw;C23XM}7_14#%QpubrIw5aZtP+CqIFmsG4`Cm6rfxl9n5
z7=r2C-+lM2AB9X0T_`?EW&Byv&K?HS4QLoylJ|OAF
z`8atBNTzJ&AQ!>sOo$?^0xj~D(;kS$`9zbEGd>f6r`NC3X`tX)sWgWUUOQ7w=$TO&*j;=u%25ay-%>3@81tGe^_z*C7pb9y*Ed^H3t$BIKH2o+olp#$q;)_
zfpjCb_^VFg5fU~K)nf*d*r@BCC>UZ!0&b?AGk_jTPXaSnCuW110wjHPPe^9R^;jo3
zwvzTl)C`Zl5}O2}3lec=hZ*$JnkW#7enKKc)(pM${_$9Hc=Sr_A9Biwe*Y=T?~1CK
z6eZ9uPICjy-sMGbZl$yQmpB&`ouS8v{58__t0$JP%i3R&%QR3ianbZqDs<2#5FdN@n5bCn^ZtH992~5k(eA|8|@G9u`wdn7bnpg|@{m
z^d6Y`*$Zf2Xr&|g%sai#5}Syvv(>Jnx&EM7-|Jr7!M~zdAyjt*xl;OLhvW-a%H1m0
z*x5*nb=R5u><7lyVpNAR?q@1U59
zO+)QWwL8t
zyip?u_nI+K$uh{y)~}qj?(w0&=SE^8`_WMM
zTybjG=999h38Yes7}-4*LJ7H)UE8{mE(6;8voE+TYY%33A>S6`G_95^5QHNTo_;Ao
ztIQIZ_}49%{8|=O;isBZ?=7kfdF8_@azfoTd+hEJKWE!)$)N%HIe2cplaK`ry#=pV
z0q{9w-`i0h@!R8K3GC{ivt{70IWG`EP|(1g7i_Q<>aEAT{5(yD
z=!O?kq61VegV+st@XCw475j6vS)_z@efuqQgHQR1T4;|-#OLZNQJPV4k$AX1Uk8Lm
z{N*b*ia=I+MB}kWpupJ~>!C@xEN#Wa7V+7{m4j8c?)ChV=D?o~sjT?0C_AQ7B-vxqX30s0I_`2$in86#`mAsT-w?j{&AL@B3$;P
z31G4(lV|b}uSDCIrjk+M1R!X7s4Aabn<)zpgT}#gE|mIvV38^ODy@<&yflpCwS#fRf9ZX3lPV_?8@C5)A;T
zqmouFLFk;qIs4rA=hh=GL~sCFsXHsqO6_y~*AFt939UYVBSx1s(=Kb&5;j7cSowdE;7()CC2|-i9Zz+_BIw8#ll~-tyH?F3{%`QCsYa*b#s*9iCc`1P1oC26?`g<9))EJ3%xz+O!B3
zZ7$j~To)C@PquR>a1+Dh>-a%IvH_Y7^ys|4o?E%3`I&ADXfC8++hAdZfzIT#%C+Jz
z1lU~K_vAm0m8Qk}K$F>|>RPK%<1SI0(G+8q~H
zAsjezyP+u!Se4q3GW)`h`NPSRlMoBjCzNPesWJwVTY!o@G8=(6I%4XHGaSiS3MEBK
zhgGFv6Jc>L$4jVE!I?TQuwvz_%CyO!bLh94nqK11C2W$*aa2ueGopG8DnBICVUORP
zgytv#)49fVXDaR$SukloYC3u7#5H)}1K21=?DKj^U)8G;MS)&Op)g^zR2($<>C*zW
z;X7`hLxiIO#J`ANdyAOJle4V%ppa*(+0i3w;8i*BA_;u8gOO6)MY`ueq7stBMJTB;
z-a0R>hT*}>z|Gg}@^zDL1MrH+2hsR8
zHc}*9IvuQC^Ju)^#Y{fOr(96rQNPNhxc;mH@W*m206>Lo<*SaaH?~8zg&f&%YiOEG
zGiz?*CP>Bci}!WiS=zj#K5I}>DtpregpP_tfZtPa(N<%vo^#WCQ5BTv0vr%Z{)0q+
z)RbfHktUm|lg&U3YM%lMUM(fu}i#kjX9h>GYctkx9Mt_8{@s%!K_EI
zScgwy6%_fR?CGJQtmgNAj^h9B#zmaMDWgH55pGuY1Gv7D
z;8Psm(vEPiwn#MgJYu4Ty9D|h!?Rj0ddE|&L3S{IP%H4^N!m`60ZwZw^;eg4sk6K{
ziA^`Sbl_4~f&Oo%n;8Ye(tiAdlZKI!Z=|j$5hS|D$bDJ}p{gh$KN&JZYLUjv4h{NY
zBJ>X9z!xfDGY
z+oh_Z&_e#Q(-}>ssZfm=j$D&4W4FNy&-kAO1~#3Im;F)Nwe{(*75(p=P^VI?X0GFakfh+X-px4a%Uw@fSbmp9hM1_~R>?Z8+
ziy|e9>8V*`OP}4x5JjdWp}7eX;lVxp5qS}0YZek;SNmm7tEeSF*-dI)6U-A%m6YvCgM(}_=k#a6o^%-K4{`B1+}O4x
zztDT%hVb;v#?j`lTvlFQ3aV#zkX=7;YFLS$uIzb0E3lozs5`Xy
zi~vF+%{z9uLjKvKPhP%x5f~7-Gj+%5N`%^=yk*Qn{`>
z;xj&ROY6g`iy2a@{O)V(jk&8#hHACVDXey5a+KDod_Z&}kHM}xt7}Md@pil{2x7E~
zL$k^d2@Ec2XskjrN+IILw;#7((abu;OJii&v3?60x>d_Ma(onIPtcVnX@ELF0aL?T
zSmWiL3(dOFkt!x=1O!_0n(cAzZW+3nHJ{2S>tgSK?~cFha^y(l@-Mr2W$%MN{#af8J;V*>hdq!gx=d0h$T7l}>91Wh07)9CTX
zh2_ZdQCyFOQ)l(}gft0UZG`Sh2`x-w`5vC2UD}lZs*5
zG76$akzn}Xi))L3oGJ75#pcN=cX3!=57$Ha=hQ2^lwdyU#a}4JJOz6ddR%zae%#4&
za)bFj)z=YQela(F#Y|Q#dp}PJghITwXouVaMq$BM?K%cXn9^Y@g43$=O)F&ZlOUom
zJiad#dea;-eywBA@e&D6Pdso1?2^(pXiN91?jvcaUyYoKUmvl5G9e$W!okWe*@a<^
z8cQQ6cNSf+UPDx%?_G4aIiybZHHagF{;IcD(dPO!#=u
zWfqLcPc^+7Uu#l(Bpxft{*4lv#*u7X9AOzDO
z1D9?^jIo}?%iz(_dwLa{ex#T}76ZfN_Z-hwpus9y+4xaUu9cX}&P{XrZVWE{1^0yw
zO;YhLEW!pJcbCt3L8~a7>jsaN{V3>tz6_7`&pi%GxZ=V3?3K^U+*ryLSb)8^IblJ0
zSRLNDvIxt)S}g30?s_3NX>F?NKIGrG_zB9@Z>uSW3k2es_H2kU;Rnn%j5qP)!XHKE
zPB2mHP~tLCg4K_vH$xv`HbRsJwbZMUV(t=ez;Ec(vyHH)FbfLg`c61I$W_uBB>i^r
z&{_P;369-&>23R%qNIULe=1~T$(DA`ev*EWZ6j(B$(te}x1WvmIll21zvygkS%vwG
zzkR6Z#RKA2!z!C%M!O>!=Gr0(J0FP=-MN=5t-Ir)of50y10W}j`GtRCsXBakrKtG&
zazmITDJMA0C51&BnLY)SY9r)NVTMs);1<=oosS9g31l{4ztjD3#+2H7u_|66b|_*O
z;Qk6nalpqdHOjx|K&vUS_6ITgGll;TdaN*ta=M_YtyC)I9Tmr~VaPrH2qb6sd~=AcIxV+%z{E&0@y=DPArw
zdV7z(G1hBx7hd{>(cr43^WF%4Y@PXZ?wPpj{OQ#tvc$pABJbvPGvdR`cAtHn)cSEV
zrpu}1tJwQ3y!mSmH*uz*x0o|CS<^w%&KJzsj~DU0cLQUxk5B!hWE>aBkjJle8z~;s
z-!A=($+}Jq_BTK5^B!`R>!MulZN)F=iXXeUd0w5lUsE5VP*H*oCy(;?S$p*TVvTxwAeWFB$jHyb0593)$zqalVlDX=GcCN1gU0
zlgU)I$LcXZ8Oyc2TZYTPu@-;7<4YYB-``Qa;IDcvydIA$%kHhJKV^m*-zxcvU4viy&Kr5GVM{IT>WRywKQ9;>SEiQD*NqplK-KK4YR`p0@JW)n_{TU3bt0
zim%;(m1=#v2}zTps=?fU5w^(*y)xT%1vtQH&}50ZF!9YxW=&7*W($2kgKyz1mUgfs
zfV<*XVVIFnohW=|j+@Kfo!#liQR^x>2yQdrG;2o8WZR+XzU_nG=Ed2rK?ntA;K5B{
z>M8+*A4!Jm^Bg}aW?R?6;@QG@uQ8&oJ{hFixcfEnJ4QH?A4>P=q29oDGW;L;=
z9-a0;g%c`C+Ai!UmK$NC*4#;Jp<1=TioL=t^YM)<<%u#hnnfSS`nq63QKGO1L8RzX
z@MFDqs1z
ztYmxDl@LU)5acvHk)~Z`RW7=aJ_nGD!mOSYD>5Odjn@TK#LY{jf?+piB5AM-CAoT_
z?S-*q7}wyLJzK>N%eMPuFgN)Q_otKP;aqy=D5f!7<=n(lNkYRXVpkB{TAYLYg{|(jtRqYmg$xH
zjmq?B(RE4
zQx^~Pt}gxC2~l=K$$-sYy_r$CO(d=+b3H1MB*y_5g6WLaWTXn+TKQ|hNY^>Mp6k*$
zwkovomhu776vQATqT4blf~g;TY(MWCrf^^yfWJvSAB$p5l;jm@o#=!lqw+Lqfq>X=
z$6~kxfm7`3q4zUEB;u4qa#BdJxO!;xGm)wwuisj{0y2x{R(IGMrsIzDY9LW>m!Y`=
z04sx3IjnYvL<4JqxQ8f7qYd0s2Ig%`ytYPEMKI)s(LD}D@EY>x`VFtqvnADNBdeao
zC96X+MxnwKmjpg{U&gP3HE}1=s!lv&D{6(g_lzyF3A`7Jn*&d_kL<;dAFx!UZ>hB8
z5A*%LsAn;VLp>3${0>M?PSQ)9s3}|h2e?TG4_F{}{Cs>#3Q*t$(CUc}M)I}8cPF6%
z=+h(Kh^8)}gj(0}#e7O^FQ6`~fd1#8#!}LMuo3A0bN`o}PYsm!Y}sdOz$+Tegc=qT
z8x`PH$7lvnhJp{kHWb22l;@7B7|4yL4UOOVM0MP_>P%S1Lnid)+k9{+3D+JFa#Pyf
zhVc#&df87APl4W9X)F3pGS>@etfl=_E5tBcVoOfrD4hmVeTY-cj((pkn%n@EgN{0f
zwb_^Rk0I#iZuHK!l*lN`ceJn(sI{$Fq6nN&
zE<-=0_2WN}m+*ivmIOxB@#~Q-cZ>l136w{#TIJe478`KE7@=a{>SzPHsKLzYAyBQO
zAtuuF$-JSDy_S@6GW0MOE~R)b;+0f%_NMrW(+V#c_d&U8Z9+ec4=HmOHw?gdjF(Lu
zzra83M_BoO-1b3;9`%&DHfuUY)6YDV21P$C!Rc?mv&{lx#f8oc6?0?x
zK08{WP65?#>(vPfA-c=MCY|%*1_<3D4NX
zeVTi-JGl2uP_2@0F{G({pxQOXt_d{g_CV6b?jNpfUG9;8yle-^4KHRvZs-_2siata
zt+d_T@U$&t*xaD22(fH(W1r$Mo?3dc%Tncm=C6{V9y{v&VT#^1L04vDrLM9qBoZ4@
z6DBN#m57hX7$C(=#$Y5$bJmwA$T8jKD8+6A!-IJwA{WOfs%s}yxUw^?MRZjF$n_KN
z6`_bGXcmE#5e4Ym)aQJ)xg3Pg0@k`iGuHe?f(5LtuzSq=nS^5z>vqU0EuZ&75V%Z{
zYyhRLN^)$c6Ds{f7*FBpE;n5iglx5PkHfWrj3`x^j^t
z7ntuV`g!9Xg#^3!x)l*}IW=(Tz3>Y5l4uGaB&lz{GDjm2D5S$CExLT`I1#n^lBH7Y
zDgpMag@`iETKAI=p<5E#LTkwzVR@=yY|uBVI1HG|8h+d;G-qfuj}-ZR6fN>EfCCW
z9~wRQoAPEa#aO?3h?x{YvV*d+NtPkf&4V0k4|L=uj!U{L+oLa(z#&iuhJr3-PjO3R
z5s?=nn_5^*^Rawr>>Nr@K(jwkB#JK-=+HqwfdO<+P5byeim)wvqGlP-P|~Nse8=XF
zz`?RYB|D6SwS}C+YQv+;}k6$-%D(@+t14BL@vM
z2q%q?f6D-A5s$_WY3{^G0F131bbh|g!}#BKw=HQ7mx;Dzg4Z*bTLQSfo{ed{4}NZW
zfrRm^Ca$rlE{Ue~uYv>R9{3smwATcdM_6+yWIO
z*ZRH~uXE@#p$XTbCt5j7j2=86e{9>HIB6xDzV+vAo&B?KUiMP|ttOElepnl%|DPqL
b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN
literal 0
HcmV?d00001
diff --git a/dummyReactApp/app/public/manifest.json b/dummyReactApp/app/public/manifest.json
new file mode 100644
index 000000000..080d6c77a
--- /dev/null
+++ b/dummyReactApp/app/public/manifest.json
@@ -0,0 +1,25 @@
+{
+ "short_name": "React App",
+ "name": "Create React App Sample",
+ "icons": [
+ {
+ "src": "favicon.ico",
+ "sizes": "64x64 32x32 24x24 16x16",
+ "type": "image/x-icon"
+ },
+ {
+ "src": "logo192.png",
+ "type": "image/png",
+ "sizes": "192x192"
+ },
+ {
+ "src": "logo512.png",
+ "type": "image/png",
+ "sizes": "512x512"
+ }
+ ],
+ "start_url": ".",
+ "display": "standalone",
+ "theme_color": "#000000",
+ "background_color": "#ffffff"
+}
diff --git a/dummyReactApp/app/public/robots.txt b/dummyReactApp/app/public/robots.txt
new file mode 100644
index 000000000..e9e57dc4d
--- /dev/null
+++ b/dummyReactApp/app/public/robots.txt
@@ -0,0 +1,3 @@
+# https://www.robotstxt.org/robotstxt.html
+User-agent: *
+Disallow:
diff --git a/dummyReactApp/app/src/App.css b/dummyReactApp/app/src/App.css
new file mode 100644
index 000000000..74b5e0534
--- /dev/null
+++ b/dummyReactApp/app/src/App.css
@@ -0,0 +1,38 @@
+.App {
+ text-align: center;
+}
+
+.App-logo {
+ height: 40vmin;
+ pointer-events: none;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ .App-logo {
+ animation: App-logo-spin infinite 20s linear;
+ }
+}
+
+.App-header {
+ background-color: #282c34;
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ font-size: calc(10px + 2vmin);
+ color: white;
+}
+
+.App-link {
+ color: #61dafb;
+}
+
+@keyframes App-logo-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
diff --git a/dummyReactApp/app/src/App.js b/dummyReactApp/app/src/App.js
new file mode 100644
index 000000000..c08fa82c9
--- /dev/null
+++ b/dummyReactApp/app/src/App.js
@@ -0,0 +1,76 @@
+import './App.css';
+import React, { Component } from 'react';
+
+class App extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ posts: [],
+ name1: "",
+ name2: "",
+ name3: "",
+ isToggleOn: true
+ }
+ this.handleClick = this.handleClick.bind(this);
+ }
+
+ getData = () => {
+ var xhr = new XMLHttpRequest();
+ let currentComponent = this;
+ xhr.addEventListener('load', ()=>{
+ console.log(xhr.responseText);
+ var jsonResponse = JSON.parse(xhr.responseText);
+ currentComponent.setState({name1: jsonResponse['name']})
+
+ })
+ xhr.open('GET', '/getmethod1')
+ xhr.send()
+ }
+
+ getData2 = () => {
+ var xhr = new XMLHttpRequest();
+ let currentComponent = this;
+ xhr.addEventListener('load', ()=>{
+ console.log(xhr.responseText);
+ var jsonResponse = JSON.parse(xhr.responseText);
+ currentComponent.setState({name2: jsonResponse['name']})
+ })
+ xhr.open('GET', '/getmethod2')
+ xhr.send()
+ }
+
+ getData3 = () => {
+ var xhr = new XMLHttpRequest();
+ let currentComponent = this;
+ xhr.addEventListener('load', ()=>{
+ console.log(xhr.responseText);
+ var jsonResponse = JSON.parse(xhr.responseText);
+ currentComponent.setState({name3: jsonResponse['name']})
+ })
+ xhr.open('GET', '/getmethod3')
+ xhr.send()
+ }
+
+ handleClick() {
+ this.setState(state => ({
+ isToggleOn: !state.isToggleOn
+ }));
+ }
+
+
+ render() {
+ const { posts } = this.state;
+ return (
+
+
Call Method1
+
Call Method2
+
Call Method3
+
Name 1: {this.state.name1}
+
Name 2: {this.state.name2}
+
Name 3: {this.state.name3}
+
+
+ );
+ }
+}
+export default App;
diff --git a/dummyReactApp/app/src/App.test.js b/dummyReactApp/app/src/App.test.js
new file mode 100644
index 000000000..4db7ebc25
--- /dev/null
+++ b/dummyReactApp/app/src/App.test.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { render } from '@testing-library/react';
+import App from './App';
+
+test('renders learn react link', () => {
+ const { getByText } = render( );
+ const linkElement = getByText(/learn react/i);
+ expect(linkElement).toBeInTheDocument();
+});
diff --git a/dummyReactApp/app/src/backend.py b/dummyReactApp/app/src/backend.py
new file mode 100644
index 000000000..978e7d454
--- /dev/null
+++ b/dummyReactApp/app/src/backend.py
@@ -0,0 +1,32 @@
+from flask import Flask, escape, request, render_template, jsonify
+from flask_cors import CORS
+
+app = Flask(__name__)
+CORS(app)
+
+@app.route('/')
+def hello():
+ names = {'name1': "Anam", 'name2': "Gaven", "name3": "Aasiyah"}
+ return render_template("index.html", names=names)
+
+@app.route('/getmethod1', methods=['GET'])
+def getData1():
+ name = "Anam Navied"
+ test_data = {'name': name}
+ return test_data
+
+@app.route('/getmethod2', methods=['GET'])
+def getData2():
+ name = "Gaven Kerr"
+ test_data = {'name': name}
+ return test_data
+
+@app.route('/getmethod3', methods=['GET'])
+def getData3():
+ name = "Aasiyah Feisal"
+ test_data = {'name': name}
+ return test_data
+
+
+if __name__ == '__main__':
+ app.run(debug=True)
\ No newline at end of file
diff --git a/dummyReactApp/app/src/index.css b/dummyReactApp/app/src/index.css
new file mode 100644
index 000000000..ec2585e8c
--- /dev/null
+++ b/dummyReactApp/app/src/index.css
@@ -0,0 +1,13 @@
+body {
+ margin: 0;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
+ 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
+ sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+code {
+ font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
+ monospace;
+}
diff --git a/dummyReactApp/app/src/index.js b/dummyReactApp/app/src/index.js
new file mode 100644
index 000000000..87d1be551
--- /dev/null
+++ b/dummyReactApp/app/src/index.js
@@ -0,0 +1,12 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import './index.css';
+import App from './App';
+import * as serviceWorker from './serviceWorker';
+
+ReactDOM.render( , document.getElementById('root'));
+
+// If you want your app to work offline and load faster, you can change
+// unregister() to register() below. Note this comes with some pitfalls.
+// Learn more about service workers: https://bit.ly/CRA-PWA
+serviceWorker.unregister();
diff --git a/dummyReactApp/app/src/logo.svg b/dummyReactApp/app/src/logo.svg
new file mode 100644
index 000000000..6b60c1042
--- /dev/null
+++ b/dummyReactApp/app/src/logo.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/dummyReactApp/app/src/serviceWorker.js b/dummyReactApp/app/src/serviceWorker.js
new file mode 100644
index 000000000..c4838eb55
--- /dev/null
+++ b/dummyReactApp/app/src/serviceWorker.js
@@ -0,0 +1,141 @@
+// This optional code is used to register a service worker.
+// register() is not called by default.
+
+// This lets the app load faster on subsequent visits in production, and gives
+// it offline capabilities. However, it also means that developers (and users)
+// will only see deployed updates on subsequent visits to a page, after all the
+// existing tabs open on the page have been closed, since previously cached
+// resources are updated in the background.
+
+// To learn more about the benefits of this model and instructions on how to
+// opt-in, read https://bit.ly/CRA-PWA
+
+const isLocalhost = Boolean(
+ window.location.hostname === 'localhost' ||
+ // [::1] is the IPv6 localhost address.
+ window.location.hostname === '[::1]' ||
+ // 127.0.0.0/8 are considered localhost for IPv4.
+ window.location.hostname.match(
+ /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
+ )
+);
+
+export function register(config) {
+ if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
+ // The URL constructor is available in all browsers that support SW.
+ const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);
+ if (publicUrl.origin !== window.location.origin) {
+ // Our service worker won't work if PUBLIC_URL is on a different origin
+ // from what our page is served on. This might happen if a CDN is used to
+ // serve assets; see https://github.com/facebook/create-react-app/issues/2374
+ return;
+ }
+
+ window.addEventListener('load', () => {
+ const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
+
+ if (isLocalhost) {
+ // This is running on localhost. Let's check if a service worker still exists or not.
+ checkValidServiceWorker(swUrl, config);
+
+ // Add some additional logging to localhost, pointing developers to the
+ // service worker/PWA documentation.
+ navigator.serviceWorker.ready.then(() => {
+ console.log(
+ 'This web app is being served cache-first by a service ' +
+ 'worker. To learn more, visit https://bit.ly/CRA-PWA'
+ );
+ });
+ } else {
+ // Is not localhost. Just register service worker
+ registerValidSW(swUrl, config);
+ }
+ });
+ }
+}
+
+function registerValidSW(swUrl, config) {
+ navigator.serviceWorker
+ .register(swUrl)
+ .then(registration => {
+ registration.onupdatefound = () => {
+ const installingWorker = registration.installing;
+ if (installingWorker == null) {
+ return;
+ }
+ installingWorker.onstatechange = () => {
+ if (installingWorker.state === 'installed') {
+ if (navigator.serviceWorker.controller) {
+ // At this point, the updated precached content has been fetched,
+ // but the previous service worker will still serve the older
+ // content until all client tabs are closed.
+ console.log(
+ 'New content is available and will be used when all ' +
+ 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'
+ );
+
+ // Execute callback
+ if (config && config.onUpdate) {
+ config.onUpdate(registration);
+ }
+ } else {
+ // At this point, everything has been precached.
+ // It's the perfect time to display a
+ // "Content is cached for offline use." message.
+ console.log('Content is cached for offline use.');
+
+ // Execute callback
+ if (config && config.onSuccess) {
+ config.onSuccess(registration);
+ }
+ }
+ }
+ };
+ };
+ })
+ .catch(error => {
+ console.error('Error during service worker registration:', error);
+ });
+}
+
+function checkValidServiceWorker(swUrl, config) {
+ // Check if the service worker can be found. If it can't reload the page.
+ fetch(swUrl, {
+ headers: { 'Service-Worker': 'script' }
+ })
+ .then(response => {
+ // Ensure service worker exists, and that we really are getting a JS file.
+ const contentType = response.headers.get('content-type');
+ if (
+ response.status === 404 ||
+ (contentType != null && contentType.indexOf('javascript') === -1)
+ ) {
+ // No service worker found. Probably a different app. Reload the page.
+ navigator.serviceWorker.ready.then(registration => {
+ registration.unregister().then(() => {
+ window.location.reload();
+ });
+ });
+ } else {
+ // Service worker found. Proceed as normal.
+ registerValidSW(swUrl, config);
+ }
+ })
+ .catch(() => {
+ console.log(
+ 'No internet connection found. App is running in offline mode.'
+ );
+ });
+}
+
+export function unregister() {
+ if ('serviceWorker' in navigator) {
+ navigator.serviceWorker.ready
+ .then(registration => {
+ registration.unregister();
+ })
+ .catch(error => {
+ console.error(error.message);
+ });
+ }
+}
diff --git a/dummyReactApp/app/src/setupTests.js b/dummyReactApp/app/src/setupTests.js
new file mode 100644
index 000000000..74b1a275a
--- /dev/null
+++ b/dummyReactApp/app/src/setupTests.js
@@ -0,0 +1,5 @@
+// jest-dom adds custom jest matchers for asserting on DOM nodes.
+// allows you to do things like:
+// expect(element).toHaveTextContent(/react/i)
+// learn more: https://github.com/testing-library/jest-dom
+import '@testing-library/jest-dom/extend-expect';
diff --git a/dummyReactApp/app/yarn.lock b/dummyReactApp/app/yarn.lock
new file mode 100644
index 000000000..d90194150
--- /dev/null
+++ b/dummyReactApp/app/yarn.lock
@@ -0,0 +1,10699 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@7.8.3", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
+ integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==
+ dependencies:
+ "@babel/highlight" "^7.8.3"
+
+"@babel/compat-data@^7.8.4":
+ version "7.8.5"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.5.tgz#d28ce872778c23551cbb9432fc68d28495b613b9"
+ integrity sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg==
+ dependencies:
+ browserslist "^4.8.5"
+ invariant "^2.2.4"
+ semver "^5.5.0"
+
+"@babel/core@7.8.4", "@babel/core@^7.1.0", "@babel/core@^7.4.5":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e"
+ integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/generator" "^7.8.4"
+ "@babel/helpers" "^7.8.4"
+ "@babel/parser" "^7.8.4"
+ "@babel/template" "^7.8.3"
+ "@babel/traverse" "^7.8.4"
+ "@babel/types" "^7.8.3"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.1"
+ json5 "^2.1.0"
+ lodash "^4.17.13"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.4.0", "@babel/generator@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e"
+ integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==
+ dependencies:
+ "@babel/types" "^7.8.3"
+ jsesc "^2.5.1"
+ lodash "^4.17.13"
+ source-map "^0.5.0"
+
+"@babel/helper-annotate-as-pure@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee"
+ integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503"
+ integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-builder-react-jsx@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz#dee98d7d79cc1f003d80b76fe01c7f8945665ff6"
+ integrity sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ==
+ dependencies:
+ "@babel/types" "^7.8.3"
+ esutils "^2.0.0"
+
+"@babel/helper-call-delegate@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz#de82619898aa605d409c42be6ffb8d7204579692"
+ integrity sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.8.3"
+ "@babel/traverse" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-compilation-targets@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz#03d7ecd454b7ebe19a254f76617e61770aed2c88"
+ integrity sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg==
+ dependencies:
+ "@babel/compat-data" "^7.8.4"
+ browserslist "^4.8.5"
+ invariant "^2.2.4"
+ levenary "^1.1.1"
+ semver "^5.5.0"
+
+"@babel/helper-create-class-features-plugin@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz#5b94be88c255f140fd2c10dd151e7f98f4bff397"
+ integrity sha512-qmp4pD7zeTxsv0JNecSBsEmG1ei2MqwJq4YQcK3ZWm/0t07QstWfvuV/vm3Qt5xNMFETn2SZqpMx2MQzbtq+KA==
+ dependencies:
+ "@babel/helper-function-name" "^7.8.3"
+ "@babel/helper-member-expression-to-functions" "^7.8.3"
+ "@babel/helper-optimise-call-expression" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-replace-supers" "^7.8.3"
+ "@babel/helper-split-export-declaration" "^7.8.3"
+
+"@babel/helper-create-regexp-features-plugin@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz#c774268c95ec07ee92476a3862b75cc2839beb79"
+ integrity sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q==
+ dependencies:
+ "@babel/helper-regex" "^7.8.3"
+ regexpu-core "^4.6.0"
+
+"@babel/helper-define-map@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15"
+ integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==
+ dependencies:
+ "@babel/helper-function-name" "^7.8.3"
+ "@babel/types" "^7.8.3"
+ lodash "^4.17.13"
+
+"@babel/helper-explode-assignable-expression@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982"
+ integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==
+ dependencies:
+ "@babel/traverse" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-function-name@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca"
+ integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.8.3"
+ "@babel/template" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-get-function-arity@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5"
+ integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-hoist-variables@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134"
+ integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-member-expression-to-functions@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c"
+ integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-module-imports@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498"
+ integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-module-transforms@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz#d305e35d02bee720fbc2c3c3623aa0c316c01590"
+ integrity sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q==
+ dependencies:
+ "@babel/helper-module-imports" "^7.8.3"
+ "@babel/helper-simple-access" "^7.8.3"
+ "@babel/helper-split-export-declaration" "^7.8.3"
+ "@babel/template" "^7.8.3"
+ "@babel/types" "^7.8.3"
+ lodash "^4.17.13"
+
+"@babel/helper-optimise-call-expression@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9"
+ integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670"
+ integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==
+
+"@babel/helper-regex@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965"
+ integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==
+ dependencies:
+ lodash "^4.17.13"
+
+"@babel/helper-remap-async-to-generator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86"
+ integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.8.3"
+ "@babel/helper-wrap-function" "^7.8.3"
+ "@babel/template" "^7.8.3"
+ "@babel/traverse" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-replace-supers@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz#91192d25f6abbcd41da8a989d4492574fb1530bc"
+ integrity sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.8.3"
+ "@babel/helper-optimise-call-expression" "^7.8.3"
+ "@babel/traverse" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-simple-access@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae"
+ integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==
+ dependencies:
+ "@babel/template" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-split-export-declaration@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9"
+ integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-wrap-function@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610"
+ integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==
+ dependencies:
+ "@babel/helper-function-name" "^7.8.3"
+ "@babel/template" "^7.8.3"
+ "@babel/traverse" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helpers@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73"
+ integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==
+ dependencies:
+ "@babel/template" "^7.8.3"
+ "@babel/traverse" "^7.8.4"
+ "@babel/types" "^7.8.3"
+
+"@babel/highlight@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797"
+ integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.8.3", "@babel/parser@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8"
+ integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==
+
+"@babel/plugin-proposal-async-generator-functions@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f"
+ integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-remap-async-to-generator" "^7.8.3"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
+
+"@babel/plugin-proposal-class-properties@7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e"
+ integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-proposal-decorators@7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz#2156860ab65c5abf068c3f67042184041066543e"
+ integrity sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-decorators" "^7.8.3"
+
+"@babel/plugin-proposal-dynamic-import@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054"
+ integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+
+"@babel/plugin-proposal-json-strings@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b"
+ integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2"
+ integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+
+"@babel/plugin-proposal-numeric-separator@7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8"
+ integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.8.3"
+
+"@babel/plugin-proposal-object-rest-spread@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb"
+ integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9"
+ integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+
+"@babel/plugin-proposal-optional-chaining@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz#ae10b3214cb25f7adb1f3bc87ba42ca10b7e2543"
+ integrity sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz#b646c3adea5f98800c9ab45105ac34d06cd4a47f"
+ integrity sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-async-generators@^7.8.0":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-decorators@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz#8d2c15a9f1af624b0025f961682a9d53d3001bda"
+ integrity sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-dynamic-import@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+ integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-flow@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz#f2c883bd61a6316f2c89380ae5122f923ba4527f"
+ integrity sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-json-strings@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94"
+ integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f"
+ integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-top-level-await@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391"
+ integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-typescript@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz#c1f659dda97711a569cef75275f7e15dcaa6cabc"
+ integrity sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-arrow-functions@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6"
+ integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-async-to-generator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086"
+ integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==
+ dependencies:
+ "@babel/helper-module-imports" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-remap-async-to-generator" "^7.8.3"
+
+"@babel/plugin-transform-block-scoped-functions@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3"
+ integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-block-scoping@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a"
+ integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ lodash "^4.17.13"
+
+"@babel/plugin-transform-classes@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz#46fd7a9d2bb9ea89ce88720477979fe0d71b21b8"
+ integrity sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.8.3"
+ "@babel/helper-define-map" "^7.8.3"
+ "@babel/helper-function-name" "^7.8.3"
+ "@babel/helper-optimise-call-expression" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-replace-supers" "^7.8.3"
+ "@babel/helper-split-export-declaration" "^7.8.3"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b"
+ integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-destructuring@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz#20ddfbd9e4676906b1056ee60af88590cc7aaa0b"
+ integrity sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-dotall-regex@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e"
+ integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-duplicate-keys@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1"
+ integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-exponentiation-operator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7"
+ integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-flow-strip-types@7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.8.3.tgz#da705a655466b2a9b36046b57bf0cbcd53551bd4"
+ integrity sha512-g/6WTWG/xbdd2exBBzMfygjX/zw4eyNC4X8pRaq7aRHRoDUCzAIu3kGYIXviOv8BjCuWm8vDBwjHcjiRNgXrPA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-flow" "^7.8.3"
+
+"@babel/plugin-transform-for-of@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz#6fe8eae5d6875086ee185dd0b098a8513783b47d"
+ integrity sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-function-name@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b"
+ integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==
+ dependencies:
+ "@babel/helper-function-name" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-literals@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1"
+ integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-member-expression-literals@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410"
+ integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-modules-amd@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz#65606d44616b50225e76f5578f33c568a0b876a5"
+ integrity sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ babel-plugin-dynamic-import-node "^2.3.0"
+
+"@babel/plugin-transform-modules-commonjs@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz#df251706ec331bd058a34bdd72613915f82928a5"
+ integrity sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-simple-access" "^7.8.3"
+ babel-plugin-dynamic-import-node "^2.3.0"
+
+"@babel/plugin-transform-modules-systemjs@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz#d8bbf222c1dbe3661f440f2f00c16e9bb7d0d420"
+ integrity sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.8.3"
+ "@babel/helper-module-transforms" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ babel-plugin-dynamic-import-node "^2.3.0"
+
+"@babel/plugin-transform-modules-umd@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz#592d578ce06c52f5b98b02f913d653ffe972661a"
+ integrity sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c"
+ integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.8.3"
+
+"@babel/plugin-transform-new-target@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43"
+ integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-object-super@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725"
+ integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-replace-supers" "^7.8.3"
+
+"@babel/plugin-transform-parameters@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz#1d5155de0b65db0ccf9971165745d3bb990d77d3"
+ integrity sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA==
+ dependencies:
+ "@babel/helper-call-delegate" "^7.8.3"
+ "@babel/helper-get-function-arity" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-property-literals@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263"
+ integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-react-constant-elements@^7.0.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.8.3.tgz#784c25294bddaad2323eb4ff0c9f4a3f6c87d6bc"
+ integrity sha512-glrzN2U+egwRfkNFtL34xIBYTxbbUF2qJTP8HD3qETBBqzAWSeNB821X0GjU06+dNpq/UyCIjI72FmGE5NNkQQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-react-display-name@7.8.3", "@babel/plugin-transform-react-display-name@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5"
+ integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-react-jsx-self@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz#c4f178b2aa588ecfa8d077ea80d4194ee77ed702"
+ integrity sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-jsx" "^7.8.3"
+
+"@babel/plugin-transform-react-jsx-source@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz#951e75a8af47f9f120db731be095d2b2c34920e0"
+ integrity sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-jsx" "^7.8.3"
+
+"@babel/plugin-transform-react-jsx@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz#4220349c0390fdefa505365f68c103562ab2fc4a"
+ integrity sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g==
+ dependencies:
+ "@babel/helper-builder-react-jsx" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-jsx" "^7.8.3"
+
+"@babel/plugin-transform-regenerator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz#b31031e8059c07495bf23614c97f3d9698bc6ec8"
+ integrity sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA==
+ dependencies:
+ regenerator-transform "^0.14.0"
+
+"@babel/plugin-transform-reserved-words@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5"
+ integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-runtime@7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz#c0153bc0a5375ebc1f1591cb7eea223adea9f169"
+ integrity sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ==
+ dependencies:
+ "@babel/helper-module-imports" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ resolve "^1.8.1"
+ semver "^5.5.1"
+
+"@babel/plugin-transform-shorthand-properties@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8"
+ integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-spread@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8"
+ integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-sticky-regex@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100"
+ integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-regex" "^7.8.3"
+
+"@babel/plugin-transform-template-literals@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80"
+ integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-typeof-symbol@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412"
+ integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-transform-typescript@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.3.tgz#be6f01a7ef423be68e65ace1f04fc407e6d88917"
+ integrity sha512-Ebj230AxcrKGZPKIp4g4TdQLrqX95TobLUWKd/CwG7X1XHUH1ZpkpFvXuXqWbtGRWb7uuEWNlrl681wsOArAdQ==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-typescript" "^7.8.3"
+
+"@babel/plugin-transform-unicode-regex@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad"
+ integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/preset-env@7.8.4", "@babel/preset-env@^7.4.5":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.4.tgz#9dac6df5f423015d3d49b6e9e5fa3413e4a72c4e"
+ integrity sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w==
+ dependencies:
+ "@babel/compat-data" "^7.8.4"
+ "@babel/helper-compilation-targets" "^7.8.4"
+ "@babel/helper-module-imports" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-proposal-async-generator-functions" "^7.8.3"
+ "@babel/plugin-proposal-dynamic-import" "^7.8.3"
+ "@babel/plugin-proposal-json-strings" "^7.8.3"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-proposal-object-rest-spread" "^7.8.3"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-proposal-optional-chaining" "^7.8.3"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.8.3"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+ "@babel/plugin-syntax-top-level-await" "^7.8.3"
+ "@babel/plugin-transform-arrow-functions" "^7.8.3"
+ "@babel/plugin-transform-async-to-generator" "^7.8.3"
+ "@babel/plugin-transform-block-scoped-functions" "^7.8.3"
+ "@babel/plugin-transform-block-scoping" "^7.8.3"
+ "@babel/plugin-transform-classes" "^7.8.3"
+ "@babel/plugin-transform-computed-properties" "^7.8.3"
+ "@babel/plugin-transform-destructuring" "^7.8.3"
+ "@babel/plugin-transform-dotall-regex" "^7.8.3"
+ "@babel/plugin-transform-duplicate-keys" "^7.8.3"
+ "@babel/plugin-transform-exponentiation-operator" "^7.8.3"
+ "@babel/plugin-transform-for-of" "^7.8.4"
+ "@babel/plugin-transform-function-name" "^7.8.3"
+ "@babel/plugin-transform-literals" "^7.8.3"
+ "@babel/plugin-transform-member-expression-literals" "^7.8.3"
+ "@babel/plugin-transform-modules-amd" "^7.8.3"
+ "@babel/plugin-transform-modules-commonjs" "^7.8.3"
+ "@babel/plugin-transform-modules-systemjs" "^7.8.3"
+ "@babel/plugin-transform-modules-umd" "^7.8.3"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3"
+ "@babel/plugin-transform-new-target" "^7.8.3"
+ "@babel/plugin-transform-object-super" "^7.8.3"
+ "@babel/plugin-transform-parameters" "^7.8.4"
+ "@babel/plugin-transform-property-literals" "^7.8.3"
+ "@babel/plugin-transform-regenerator" "^7.8.3"
+ "@babel/plugin-transform-reserved-words" "^7.8.3"
+ "@babel/plugin-transform-shorthand-properties" "^7.8.3"
+ "@babel/plugin-transform-spread" "^7.8.3"
+ "@babel/plugin-transform-sticky-regex" "^7.8.3"
+ "@babel/plugin-transform-template-literals" "^7.8.3"
+ "@babel/plugin-transform-typeof-symbol" "^7.8.4"
+ "@babel/plugin-transform-unicode-regex" "^7.8.3"
+ "@babel/types" "^7.8.3"
+ browserslist "^4.8.5"
+ core-js-compat "^3.6.2"
+ invariant "^2.2.2"
+ levenary "^1.1.1"
+ semver "^5.5.0"
+
+"@babel/preset-react@7.8.3", "@babel/preset-react@^7.0.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.8.3.tgz#23dc63f1b5b0751283e04252e78cf1d6589273d2"
+ integrity sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-transform-react-display-name" "^7.8.3"
+ "@babel/plugin-transform-react-jsx" "^7.8.3"
+ "@babel/plugin-transform-react-jsx-self" "^7.8.3"
+ "@babel/plugin-transform-react-jsx-source" "^7.8.3"
+
+"@babel/preset-typescript@7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.8.3.tgz#90af8690121beecd9a75d0cc26c6be39d1595d13"
+ integrity sha512-qee5LgPGui9zQ0jR1TeU5/fP9L+ovoArklEqY12ek8P/wV5ZeM/VYSQYwICeoT6FfpJTekG9Ilay5PhwsOpMHA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-transform-typescript" "^7.8.3"
+
+"@babel/runtime@7.8.4", "@babel/runtime@^7.0.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308"
+ integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==
+ dependencies:
+ regenerator-runtime "^0.13.2"
+
+"@babel/template@^7.4.0", "@babel/template@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8"
+ integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/parser" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c"
+ integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/generator" "^7.8.4"
+ "@babel/helper-function-name" "^7.8.3"
+ "@babel/helper-split-export-declaration" "^7.8.3"
+ "@babel/parser" "^7.8.4"
+ "@babel/types" "^7.8.3"
+ debug "^4.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.13"
+
+"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c"
+ integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==
+ dependencies:
+ esutils "^2.0.2"
+ lodash "^4.17.13"
+ to-fast-properties "^2.0.0"
+
+"@cnakazawa/watch@^1.0.3":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
+ integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==
+ dependencies:
+ exec-sh "^0.3.2"
+ minimist "^1.2.0"
+
+"@csstools/convert-colors@^1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
+ integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
+
+"@csstools/normalize.css@^10.1.0":
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18"
+ integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==
+
+"@emotion/hash@^0.7.4":
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.4.tgz#f14932887422c9056b15a8d222a9074a7dfa2831"
+ integrity sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A==
+
+"@hapi/address@2.x.x":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
+ integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==
+
+"@hapi/bourne@1.x.x":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a"
+ integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==
+
+"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0":
+ version "8.5.1"
+ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06"
+ integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==
+
+"@hapi/joi@^15.0.0":
+ version "15.1.1"
+ resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7"
+ integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==
+ dependencies:
+ "@hapi/address" "2.x.x"
+ "@hapi/bourne" "1.x.x"
+ "@hapi/hoek" "8.x.x"
+ "@hapi/topo" "3.x.x"
+
+"@hapi/topo@3.x.x":
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29"
+ integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==
+ dependencies:
+ "@hapi/hoek" "^8.3.0"
+
+"@jest/console@^24.7.1", "@jest/console@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0"
+ integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==
+ dependencies:
+ "@jest/source-map" "^24.9.0"
+ chalk "^2.0.1"
+ slash "^2.0.0"
+
+"@jest/core@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4"
+ integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/reporters" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ graceful-fs "^4.1.15"
+ jest-changed-files "^24.9.0"
+ jest-config "^24.9.0"
+ jest-haste-map "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve "^24.9.0"
+ jest-resolve-dependencies "^24.9.0"
+ jest-runner "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-snapshot "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ jest-watcher "^24.9.0"
+ micromatch "^3.1.10"
+ p-each-series "^1.0.0"
+ realpath-native "^1.1.0"
+ rimraf "^2.5.4"
+ slash "^2.0.0"
+ strip-ansi "^5.0.0"
+
+"@jest/environment@^24.3.0", "@jest/environment@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18"
+ integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==
+ dependencies:
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ jest-mock "^24.9.0"
+
+"@jest/fake-timers@^24.3.0", "@jest/fake-timers@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93"
+ integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-mock "^24.9.0"
+
+"@jest/reporters@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43"
+ integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==
+ dependencies:
+ "@jest/environment" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ glob "^7.1.2"
+ istanbul-lib-coverage "^2.0.2"
+ istanbul-lib-instrument "^3.0.1"
+ istanbul-lib-report "^2.0.4"
+ istanbul-lib-source-maps "^3.0.1"
+ istanbul-reports "^2.2.6"
+ jest-haste-map "^24.9.0"
+ jest-resolve "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-util "^24.9.0"
+ jest-worker "^24.6.0"
+ node-notifier "^5.4.2"
+ slash "^2.0.0"
+ source-map "^0.6.0"
+ string-length "^2.0.0"
+
+"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714"
+ integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==
+ dependencies:
+ callsites "^3.0.0"
+ graceful-fs "^4.1.15"
+ source-map "^0.6.0"
+
+"@jest/test-result@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca"
+ integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==
+ dependencies:
+ "@jest/console" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+
+"@jest/test-sequencer@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31"
+ integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==
+ dependencies:
+ "@jest/test-result" "^24.9.0"
+ jest-haste-map "^24.9.0"
+ jest-runner "^24.9.0"
+ jest-runtime "^24.9.0"
+
+"@jest/transform@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56"
+ integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/types" "^24.9.0"
+ babel-plugin-istanbul "^5.1.0"
+ chalk "^2.0.1"
+ convert-source-map "^1.4.0"
+ fast-json-stable-stringify "^2.0.0"
+ graceful-fs "^4.1.15"
+ jest-haste-map "^24.9.0"
+ jest-regex-util "^24.9.0"
+ jest-util "^24.9.0"
+ micromatch "^3.1.10"
+ pirates "^4.0.1"
+ realpath-native "^1.1.0"
+ slash "^2.0.0"
+ source-map "^0.6.1"
+ write-file-atomic "2.4.1"
+
+"@jest/types@^24.3.0", "@jest/types@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59"
+ integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^1.1.1"
+ "@types/yargs" "^13.0.0"
+
+"@material-ui/core@^4.9.4":
+ version "4.9.4"
+ resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.9.4.tgz#796515b12845dc6ea7e21872888cfc4c0c1c1efe"
+ integrity sha512-1wqm3jBC8mGpVHu0wVOYBX7LUzkPsWxkkTtKSn0Hz66T6TDJkke72mkSIL7akNdjnxy+bRc2Vi6NiJ4YutkDcw==
+ dependencies:
+ "@babel/runtime" "^7.4.4"
+ "@material-ui/styles" "^4.9.0"
+ "@material-ui/system" "^4.9.3"
+ "@material-ui/types" "^5.0.0"
+ "@material-ui/utils" "^4.7.1"
+ "@types/react-transition-group" "^4.2.0"
+ clsx "^1.0.2"
+ hoist-non-react-statics "^3.3.2"
+ popper.js "^1.14.1"
+ prop-types "^15.7.2"
+ react-is "^16.8.0"
+ react-transition-group "^4.3.0"
+
+"@material-ui/icons@^4.9.1":
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.9.1.tgz#fdeadf8cb3d89208945b33dbc50c7c616d0bd665"
+ integrity sha512-GBitL3oBWO0hzBhvA9KxqcowRUsA0qzwKkURyC8nppnC3fw54KPKZ+d4V1Eeg/UnDRSzDaI9nGCdel/eh9AQMg==
+ dependencies:
+ "@babel/runtime" "^7.4.4"
+
+"@material-ui/styles@^4.9.0":
+ version "4.9.0"
+ resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.9.0.tgz#10c31859f6868cfa9d3adf6b6c3e32c9d676bc76"
+ integrity sha512-nJHum4RqYBPWsjL/9JET8Z02FZ9gSizlg/7LWVFpIthNzpK6OQ5OSRR4T4x9/p+wK3t1qNn3b1uI4XpnZaPxOA==
+ dependencies:
+ "@babel/runtime" "^7.4.4"
+ "@emotion/hash" "^0.7.4"
+ "@material-ui/types" "^5.0.0"
+ "@material-ui/utils" "^4.7.1"
+ clsx "^1.0.2"
+ csstype "^2.5.2"
+ hoist-non-react-statics "^3.2.1"
+ jss "^10.0.3"
+ jss-plugin-camel-case "^10.0.3"
+ jss-plugin-default-unit "^10.0.3"
+ jss-plugin-global "^10.0.3"
+ jss-plugin-nested "^10.0.3"
+ jss-plugin-props-sort "^10.0.3"
+ jss-plugin-rule-value-function "^10.0.3"
+ jss-plugin-vendor-prefixer "^10.0.3"
+ prop-types "^15.7.2"
+
+"@material-ui/system@^4.9.3":
+ version "4.9.3"
+ resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.9.3.tgz#ee48990d7941237fdaf21b7b399981d614bb0875"
+ integrity sha512-DBGsTKYrLlFpHG8BUp0X6ZpvaOzef+GhSwn/8DwVTXUdHitphaPQoL9xucrI8X9MTBo//El+7nylko7lo7eJIw==
+ dependencies:
+ "@babel/runtime" "^7.4.4"
+ "@material-ui/utils" "^4.7.1"
+ prop-types "^15.7.2"
+
+"@material-ui/types@^5.0.0":
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.0.0.tgz#26d6259dc6b39f4c2e1e9aceff7a11e031941741"
+ integrity sha512-UeH2BuKkwDndtMSS0qgx1kCzSMw+ydtj0xx/XbFtxNSTlXydKwzs5gVW5ZKsFlAkwoOOQ9TIsyoCC8hq18tOwg==
+
+"@material-ui/utils@^4.7.1":
+ version "4.7.1"
+ resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.7.1.tgz#dc16c7f0d2cd02fbcdd5cfe601fd6863ae3cc652"
+ integrity sha512-+ux0SlLdlehvzCk2zdQ3KiS3/ylWvuo/JwAGhvb8dFVvwR21K28z0PU9OQW2PGogrMEdvX3miEI5tGxTwwWiwQ==
+ dependencies:
+ "@babel/runtime" "^7.4.4"
+ prop-types "^15.7.2"
+ react-is "^16.8.0"
+
+"@mrmlnc/readdir-enhanced@^2.2.1":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
+ integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
+ dependencies:
+ call-me-maybe "^1.0.1"
+ glob-to-regexp "^0.3.0"
+
+"@nodelib/fs.stat@^1.1.2":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
+ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
+
+"@sheerun/mutationobserver-shim@^0.3.2":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz#8013f2af54a2b7d735f71560ff360d3a8176a87b"
+ integrity sha512-vTCdPp/T/Q3oSqwHmZ5Kpa9oI7iLtGl3RQaA/NyLHikvcrPxACkkKVr/XzkSPJWXHRhKGzVvb0urJsbMlRxi1Q==
+
+"@svgr/babel-plugin-add-jsx-attribute@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz#dadcb6218503532d6884b210e7f3c502caaa44b1"
+ integrity sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig==
+
+"@svgr/babel-plugin-remove-jsx-attribute@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz#297550b9a8c0c7337bea12bdfc8a80bb66f85abc"
+ integrity sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ==
+
+"@svgr/babel-plugin-remove-jsx-empty-expression@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz#c196302f3e68eab6a05e98af9ca8570bc13131c7"
+ integrity sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w==
+
+"@svgr/babel-plugin-replace-jsx-attribute-value@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz#310ec0775de808a6a2e4fd4268c245fd734c1165"
+ integrity sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w==
+
+"@svgr/babel-plugin-svg-dynamic-title@^4.3.3":
+ version "4.3.3"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz#2cdedd747e5b1b29ed4c241e46256aac8110dd93"
+ integrity sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w==
+
+"@svgr/babel-plugin-svg-em-dimensions@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz#9a94791c9a288108d20a9d2cc64cac820f141391"
+ integrity sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w==
+
+"@svgr/babel-plugin-transform-react-native-svg@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz#151487322843359a1ca86b21a3815fd21a88b717"
+ integrity sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw==
+
+"@svgr/babel-plugin-transform-svg-component@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz#5f1e2f886b2c85c67e76da42f0f6be1b1767b697"
+ integrity sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw==
+
+"@svgr/babel-preset@^4.3.3":
+ version "4.3.3"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-4.3.3.tgz#a75d8c2f202ac0e5774e6bfc165d028b39a1316c"
+ integrity sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A==
+ dependencies:
+ "@svgr/babel-plugin-add-jsx-attribute" "^4.2.0"
+ "@svgr/babel-plugin-remove-jsx-attribute" "^4.2.0"
+ "@svgr/babel-plugin-remove-jsx-empty-expression" "^4.2.0"
+ "@svgr/babel-plugin-replace-jsx-attribute-value" "^4.2.0"
+ "@svgr/babel-plugin-svg-dynamic-title" "^4.3.3"
+ "@svgr/babel-plugin-svg-em-dimensions" "^4.2.0"
+ "@svgr/babel-plugin-transform-react-native-svg" "^4.2.0"
+ "@svgr/babel-plugin-transform-svg-component" "^4.2.0"
+
+"@svgr/core@^4.3.3":
+ version "4.3.3"
+ resolved "https://registry.yarnpkg.com/@svgr/core/-/core-4.3.3.tgz#b37b89d5b757dc66e8c74156d00c368338d24293"
+ integrity sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w==
+ dependencies:
+ "@svgr/plugin-jsx" "^4.3.3"
+ camelcase "^5.3.1"
+ cosmiconfig "^5.2.1"
+
+"@svgr/hast-util-to-babel-ast@^4.3.2":
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz#1d5a082f7b929ef8f1f578950238f630e14532b8"
+ integrity sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg==
+ dependencies:
+ "@babel/types" "^7.4.4"
+
+"@svgr/plugin-jsx@^4.3.3":
+ version "4.3.3"
+ resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-4.3.3.tgz#e2ba913dbdfbe85252a34db101abc7ebd50992fa"
+ integrity sha512-cLOCSpNWQnDB1/v+SUENHH7a0XY09bfuMKdq9+gYvtuwzC2rU4I0wKGFEp1i24holdQdwodCtDQdFtJiTCWc+w==
+ dependencies:
+ "@babel/core" "^7.4.5"
+ "@svgr/babel-preset" "^4.3.3"
+ "@svgr/hast-util-to-babel-ast" "^4.3.2"
+ svg-parser "^2.0.0"
+
+"@svgr/plugin-svgo@^4.3.1":
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz#daac0a3d872e3f55935c6588dd370336865e9e32"
+ integrity sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w==
+ dependencies:
+ cosmiconfig "^5.2.1"
+ merge-deep "^3.0.2"
+ svgo "^1.2.2"
+
+"@svgr/webpack@4.3.3":
+ version "4.3.3"
+ resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-4.3.3.tgz#13cc2423bf3dff2d494f16b17eb7eacb86895017"
+ integrity sha512-bjnWolZ6KVsHhgyCoYRFmbd26p8XVbulCzSG53BDQqAr+JOAderYK7CuYrB3bDjHJuF6LJ7Wrr42+goLRV9qIg==
+ dependencies:
+ "@babel/core" "^7.4.5"
+ "@babel/plugin-transform-react-constant-elements" "^7.0.0"
+ "@babel/preset-env" "^7.4.5"
+ "@babel/preset-react" "^7.0.0"
+ "@svgr/core" "^4.3.3"
+ "@svgr/plugin-jsx" "^4.3.3"
+ "@svgr/plugin-svgo" "^4.3.1"
+ loader-utils "^1.2.3"
+
+"@testing-library/dom@^6.11.0":
+ version "6.12.2"
+ resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-6.12.2.tgz#5d549acf43f2e0c23b2abfd4e36d65594c3b2741"
+ integrity sha512-KCnvHra5fV+wDxg3wJObGvZFxq7v1DJt829GNFLuRDjKxVNc/B5AdsylNF5PMHFbWMXDsHwM26d2NZcZO9KjbQ==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@sheerun/mutationobserver-shim" "^0.3.2"
+ "@types/testing-library__dom" "^6.0.0"
+ aria-query "3.0.0"
+ pretty-format "^24.9.0"
+ wait-for-expect "^3.0.0"
+
+"@testing-library/jest-dom@^4.2.4":
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-4.2.4.tgz#00dfa0cbdd837d9a3c2a7f3f0a248ea6e7b89742"
+ integrity sha512-j31Bn0rQo12fhCWOUWy9fl7wtqkp7In/YP2p5ZFyRuiiB9Qs3g+hS4gAmDWONbAHcRmVooNJ5eOHQDCOmUFXHg==
+ dependencies:
+ "@babel/runtime" "^7.5.1"
+ chalk "^2.4.1"
+ css "^2.2.3"
+ css.escape "^1.5.1"
+ jest-diff "^24.0.0"
+ jest-matcher-utils "^24.0.0"
+ lodash "^4.17.11"
+ pretty-format "^24.0.0"
+ redent "^3.0.0"
+
+"@testing-library/react@^9.3.2":
+ version "9.4.1"
+ resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-9.4.1.tgz#955771568aa3216107d307bfdf470bf2394308a0"
+ integrity sha512-sta3ui24HPgW92quHyQj6gpOkNgLNx8BX/QOU4k1bddo43ZdqlGwmzCYwL93bExfhergwiau+IzBGl7TCsSFeA==
+ dependencies:
+ "@babel/runtime" "^7.8.3"
+ "@testing-library/dom" "^6.11.0"
+ "@types/testing-library__react" "^9.1.2"
+
+"@testing-library/user-event@^7.1.2":
+ version "7.2.1"
+ resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-7.2.1.tgz#2ad4e844175a3738cb9e7064be5ea070b8863a1c"
+ integrity sha512-oZ0Ib5I4Z2pUEcoo95cT1cr6slco9WY7yiPpG+RGNkj8YcYgJnM7pXmYmorNOReh8MIGcKSqXyeGjxnr8YiZbA==
+
+"@types/babel__core@^7.1.0":
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.4.tgz#5c5569cc40e5f2737dfc00692f5444e871e4a234"
+ integrity sha512-c/5MuRz5HM4aizqL5ViYfW4iEnmfPcfbH4Xa6GgLT21dMc1NGeNnuS6egHheOmP+kCJ9CAzC4pv4SDCWTnRkbg==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.6.1"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04"
+ integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307"
+ integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
+ version "7.0.8"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.8.tgz#479a4ee3e291a403a1096106013ec22cf9b64012"
+ integrity sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw==
+ dependencies:
+ "@babel/types" "^7.3.0"
+
+"@types/eslint-visitor-keys@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
+ integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
+
+"@types/events@*":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
+ integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
+
+"@types/glob@^7.1.1":
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
+ integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==
+ dependencies:
+ "@types/events" "*"
+ "@types/minimatch" "*"
+ "@types/node" "*"
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
+ integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==
+
+"@types/istanbul-lib-report@*":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
+ integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a"
+ integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+ "@types/istanbul-lib-report" "*"
+
+"@types/json-schema@^7.0.3":
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339"
+ integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==
+
+"@types/minimatch@*":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
+ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
+
+"@types/node@*":
+ version "13.7.1"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.1.tgz#238eb34a66431b71d2aaddeaa7db166f25971a0d"
+ integrity sha512-Zq8gcQGmn4txQEJeiXo/KiLpon8TzAl0kmKH4zdWctPj05nWwp1ClMdAVEloqrQKfaC48PNLdgN/aVaLqUrluA==
+
+"@types/parse-json@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
+"@types/prop-types@*":
+ version "15.7.3"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
+ integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
+
+"@types/q@^1.5.1":
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
+ integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==
+
+"@types/react-dom@*":
+ version "16.9.5"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.5.tgz#5de610b04a35d07ffd8f44edad93a71032d9aaa7"
+ integrity sha512-BX6RQ8s9D+2/gDhxrj8OW+YD4R+8hj7FEM/OJHGNR0KipE1h1mSsf39YeyC81qafkq+N3rU3h3RFbLSwE5VqUg==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react-transition-group@^4.2.0":
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.2.3.tgz#4924133f7268694058e415bf7aea2d4c21131470"
+ integrity sha512-Hk8jiuT7iLOHrcjKP/ZVSyCNXK73wJAUz60xm0mVhiRujrdiI++j4duLiL282VGxwAgxetHQFfqA29LgEeSkFA==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react@*":
+ version "16.9.22"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.22.tgz#f0288c92d94e93c4b43e3f5633edf788b2c040ae"
+ integrity sha512-7OSt4EGiLvy0h5R7X+r0c7S739TCU/LvWbkNOrm10lUwNHe7XPz5OLhLOSZeCkqO9JSCly1NkYJ7ODTUqVnHJQ==
+ dependencies:
+ "@types/prop-types" "*"
+ csstype "^2.2.0"
+
+"@types/stack-utils@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
+ integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
+
+"@types/testing-library__dom@*", "@types/testing-library__dom@^6.0.0":
+ version "6.12.1"
+ resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-6.12.1.tgz#37af28fae051f9e3feed5684535b1540c97ae28b"
+ integrity sha512-cgqnEjxKk31tQt29j4baSWaZPNjQf3bHalj2gcHQTpW5SuHRal76gOpF0vypeEo6o+sS5inOvvNdzLY0B3FB2A==
+ dependencies:
+ pretty-format "^24.3.0"
+
+"@types/testing-library__react@^9.1.2":
+ version "9.1.2"
+ resolved "https://registry.yarnpkg.com/@types/testing-library__react/-/testing-library__react-9.1.2.tgz#e33af9124c60a010fc03a34eff8f8a34a75c4351"
+ integrity sha512-CYaMqrswQ+cJACy268jsLAw355DZtPZGt3Jwmmotlcu8O/tkoXBI6AeZ84oZBJsIsesozPKzWzmv/0TIU+1E9Q==
+ dependencies:
+ "@types/react-dom" "*"
+ "@types/testing-library__dom" "*"
+
+"@types/yargs-parser@*":
+ version "15.0.0"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
+ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
+
+"@types/yargs@^13.0.0":
+ version "13.0.8"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99"
+ integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@typescript-eslint/eslint-plugin@^2.10.0":
+ version "2.19.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.19.2.tgz#e279aaae5d5c1f2547b4cff99204e1250bc7a058"
+ integrity sha512-HX2qOq2GOV04HNrmKnTpSIpHjfl7iwdXe3u/Nvt+/cpmdvzYvY0NHSiTkYN257jHnq4OM/yo+OsFgati+7LqJA==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "2.19.2"
+ eslint-utils "^1.4.3"
+ functional-red-black-tree "^1.0.1"
+ regexpp "^3.0.0"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/experimental-utils@2.19.2":
+ version "2.19.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.19.2.tgz#4611d44cf0f0cb460c26aa7676fc0a787281e233"
+ integrity sha512-B88QuwT1wMJR750YvTJBNjMZwmiPpbmKYLm1yI7PCc3x0NariqPwqaPsoJRwU9DmUi0cd9dkhz1IqEnwfD+P1A==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/typescript-estree" "2.19.2"
+ eslint-scope "^5.0.0"
+
+"@typescript-eslint/parser@^2.10.0":
+ version "2.19.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.19.2.tgz#21f42c0694846367e7d6a907feb08ab2f89c0879"
+ integrity sha512-8uwnYGKqX9wWHGPGdLB9sk9+12sjcdqEEYKGgbS8A0IvYX59h01o8os5qXUHMq2na8vpDRaV0suTLM7S8wraTA==
+ dependencies:
+ "@types/eslint-visitor-keys" "^1.0.0"
+ "@typescript-eslint/experimental-utils" "2.19.2"
+ "@typescript-eslint/typescript-estree" "2.19.2"
+ eslint-visitor-keys "^1.1.0"
+
+"@typescript-eslint/typescript-estree@2.19.2":
+ version "2.19.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.19.2.tgz#67485b00172f400474d243c6c0be27581a579350"
+ integrity sha512-Xu/qa0MDk6upQWqE4Qy2X16Xg8Vi32tQS2PR0AvnT/ZYS4YGDvtn2MStOh5y8Zy2mg4NuL06KUHlvCh95j9C6Q==
+ dependencies:
+ debug "^4.1.1"
+ eslint-visitor-keys "^1.1.0"
+ glob "^7.1.6"
+ is-glob "^4.0.1"
+ lodash "^4.17.15"
+ semver "^6.3.0"
+ tsutils "^3.17.1"
+
+"@webassemblyjs/ast@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359"
+ integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/wast-parser" "1.8.5"
+
+"@webassemblyjs/floating-point-hex-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721"
+ integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==
+
+"@webassemblyjs/helper-api-error@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7"
+ integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==
+
+"@webassemblyjs/helper-buffer@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204"
+ integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==
+
+"@webassemblyjs/helper-code-frame@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e"
+ integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/helper-fsm@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452"
+ integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==
+
+"@webassemblyjs/helper-module-context@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245"
+ integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ mamacro "^0.0.3"
+
+"@webassemblyjs/helper-wasm-bytecode@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61"
+ integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==
+
+"@webassemblyjs/helper-wasm-section@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf"
+ integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+
+"@webassemblyjs/ieee754@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e"
+ integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10"
+ integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc"
+ integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==
+
+"@webassemblyjs/wasm-edit@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a"
+ integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/helper-wasm-section" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+ "@webassemblyjs/wasm-opt" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+ "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/wasm-gen@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc"
+ integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/ieee754" "1.8.5"
+ "@webassemblyjs/leb128" "1.8.5"
+ "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wasm-opt@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264"
+ integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+
+"@webassemblyjs/wasm-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d"
+ integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-api-error" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/ieee754" "1.8.5"
+ "@webassemblyjs/leb128" "1.8.5"
+ "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wast-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c"
+ integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/floating-point-hex-parser" "1.8.5"
+ "@webassemblyjs/helper-api-error" "1.8.5"
+ "@webassemblyjs/helper-code-frame" "1.8.5"
+ "@webassemblyjs/helper-fsm" "1.8.5"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc"
+ integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/wast-parser" "1.8.5"
+ "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+abab@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a"
+ integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==
+
+accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+ integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+ dependencies:
+ mime-types "~2.1.24"
+ negotiator "0.6.2"
+
+acorn-globals@^4.1.0, acorn-globals@^4.3.0:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7"
+ integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==
+ dependencies:
+ acorn "^6.0.1"
+ acorn-walk "^6.0.1"
+
+acorn-jsx@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384"
+ integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==
+
+acorn-walk@^6.0.1:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
+ integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
+
+acorn@^5.5.3:
+ version "5.7.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
+ integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
+
+acorn@^6.0.1, acorn@^6.0.4, acorn@^6.2.1:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784"
+ integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==
+
+acorn@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c"
+ integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==
+
+address@1.1.2, address@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
+ integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==
+
+adjust-sourcemap-loader@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz#6471143af75ec02334b219f54bc7970c52fb29a4"
+ integrity sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==
+ dependencies:
+ assert "1.4.1"
+ camelcase "5.0.0"
+ loader-utils "1.2.3"
+ object-path "0.11.4"
+ regex-parser "2.2.10"
+
+aggregate-error@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0"
+ integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
+ajv-errors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+ integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
+ integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
+
+ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5:
+ version "6.11.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.11.0.tgz#c3607cbc8ae392d8a5a536f25b21f8e5f3f87fe9"
+ integrity sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+alphanum-sort@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+ integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
+
+ansi-colors@^3.0.0:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
+ integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
+
+ansi-escapes@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+ integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
+ansi-escapes@^4.2.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d"
+ integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==
+ dependencies:
+ type-fest "^0.8.1"
+
+ansi-html@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
+ integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4=
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.0.0, ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+anymatch@~3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
+ integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+aria-query@3.0.0, aria-query@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc"
+ integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=
+ dependencies:
+ ast-types-flow "0.0.7"
+ commander "^2.11.0"
+
+arity-n@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745"
+ integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U=
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+ integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
+
+array-flatten@^2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
+ integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
+
+array-includes@^3.0.3, array-includes@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348"
+ integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0"
+ is-string "^1.0.5"
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+array.prototype.flat@^1.2.1:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
+ integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asap@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+ integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
+
+asn1.js@^4.0.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+ integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=
+ dependencies:
+ util "0.10.3"
+
+assert@^1.1.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+ integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+ dependencies:
+ object-assign "^4.1.1"
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+ast-types-flow@0.0.7, ast-types-flow@^0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+ integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
+
+astral-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async-limiter@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+ integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+async@^2.6.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+ integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
+ dependencies:
+ lodash "^4.17.14"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+atob@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+autoprefixer@^9.6.1:
+ version "9.7.4"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.4.tgz#f8bf3e06707d047f0641d87aee8cfb174b2a5378"
+ integrity sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==
+ dependencies:
+ browserslist "^4.8.3"
+ caniuse-lite "^1.0.30001020"
+ chalk "^2.4.2"
+ normalize-range "^0.1.2"
+ num2fraction "^1.2.2"
+ postcss "^7.0.26"
+ postcss-value-parser "^4.0.2"
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.8.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
+ integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
+
+axobject-query@^2.0.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.2.tgz#2bdffc0371e643e5f03ba99065d5179b9ca79799"
+ integrity sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ==
+
+babel-code-frame@^6.22.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+ dependencies:
+ chalk "^1.1.3"
+ esutils "^2.0.2"
+ js-tokens "^3.0.2"
+
+babel-eslint@10.0.3:
+ version "10.0.3"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a"
+ integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.0.0"
+ "@babel/traverse" "^7.0.0"
+ "@babel/types" "^7.0.0"
+ eslint-visitor-keys "^1.0.0"
+ resolve "^1.12.0"
+
+babel-extract-comments@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21"
+ integrity sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==
+ dependencies:
+ babylon "^6.18.0"
+
+babel-jest@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54"
+ integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==
+ dependencies:
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/babel__core" "^7.1.0"
+ babel-plugin-istanbul "^5.1.0"
+ babel-preset-jest "^24.9.0"
+ chalk "^2.4.2"
+ slash "^2.0.0"
+
+babel-loader@8.0.6:
+ version "8.0.6"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb"
+ integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==
+ dependencies:
+ find-cache-dir "^2.0.0"
+ loader-utils "^1.0.2"
+ mkdirp "^0.5.1"
+ pify "^4.0.1"
+
+babel-plugin-dynamic-import-node@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f"
+ integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==
+ dependencies:
+ object.assign "^4.1.0"
+
+babel-plugin-istanbul@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854"
+ integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ find-up "^3.0.0"
+ istanbul-lib-instrument "^3.3.0"
+ test-exclude "^5.2.3"
+
+babel-plugin-jest-hoist@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756"
+ integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==
+ dependencies:
+ "@types/babel__traverse" "^7.0.6"
+
+babel-plugin-macros@2.8.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
+ integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ cosmiconfig "^6.0.0"
+ resolve "^1.12.0"
+
+babel-plugin-named-asset-import@^0.3.6:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.6.tgz#c9750a1b38d85112c9e166bf3ef7c5dbc605f4be"
+ integrity sha512-1aGDUfL1qOOIoqk9QKGIo2lANk+C7ko/fqH0uIyC71x3PEGz0uVP8ISgfEsFuG+FKmjHTvFK/nNM8dowpmUxLA==
+
+babel-plugin-syntax-object-rest-spread@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
+ integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
+
+babel-plugin-transform-object-rest-spread@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
+ integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=
+ dependencies:
+ babel-plugin-syntax-object-rest-spread "^6.8.0"
+ babel-runtime "^6.26.0"
+
+babel-plugin-transform-react-remove-prop-types@0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a"
+ integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==
+
+babel-preset-jest@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc"
+ integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==
+ dependencies:
+ "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
+ babel-plugin-jest-hoist "^24.9.0"
+
+babel-preset-react-app@^9.1.1:
+ version "9.1.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-9.1.1.tgz#d1ceb47cbe48b285fdd5c562c54c432ed5a41e0e"
+ integrity sha512-YkWP2UwY//TLltNlEBRngDOrYhvSLb+CA330G7T9M5UhGEMWe+JK/8IXJc5p2fDTSfSiETf+PY0+PYXFMix81Q==
+ dependencies:
+ "@babel/core" "7.8.4"
+ "@babel/plugin-proposal-class-properties" "7.8.3"
+ "@babel/plugin-proposal-decorators" "7.8.3"
+ "@babel/plugin-proposal-numeric-separator" "7.8.3"
+ "@babel/plugin-transform-flow-strip-types" "7.8.3"
+ "@babel/plugin-transform-react-display-name" "7.8.3"
+ "@babel/plugin-transform-runtime" "7.8.3"
+ "@babel/preset-env" "7.8.4"
+ "@babel/preset-react" "7.8.3"
+ "@babel/preset-typescript" "7.8.3"
+ "@babel/runtime" "7.8.4"
+ babel-plugin-macros "2.8.0"
+ babel-plugin-transform-react-remove-prop-types "0.4.24"
+
+babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
+babylon@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+ integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base64-js@^1.0.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
+ integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+batch@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+ integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+binary-extensions@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c"
+ integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==
+
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
+bluebird@^3.5.5:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+ integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+
+body-parser@1.19.0:
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
+ integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
+ dependencies:
+ bytes "3.1.0"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "~1.1.2"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ on-finished "~2.3.0"
+ qs "6.7.0"
+ raw-body "2.4.0"
+ type-is "~1.6.17"
+
+bonjour@^3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
+ integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU=
+ dependencies:
+ array-flatten "^2.1.0"
+ deep-equal "^1.0.1"
+ dns-equal "^1.0.0"
+ dns-txt "^2.0.2"
+ multicast-dns "^6.0.1"
+ multicast-dns-service-types "^1.1.0"
+
+boolbase@^1.0.0, boolbase@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browser-process-hrtime@^0.1.2:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4"
+ integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==
+
+browser-resolve@^1.11.3:
+ version "1.11.3"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
+ integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
+ dependencies:
+ resolve "1.1.7"
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+browserslist@4.8.6:
+ version "4.8.6"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.6.tgz#96406f3f5f0755d272e27a66f4163ca821590a7e"
+ integrity sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg==
+ dependencies:
+ caniuse-lite "^1.0.30001023"
+ electron-to-chromium "^1.3.341"
+ node-releases "^1.1.47"
+
+browserslist@^4.0.0, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.8.3, browserslist@^4.8.5:
+ version "4.8.7"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.7.tgz#ec8301ff415e6a42c949d0e66b405eb539c532d0"
+ integrity sha512-gFOnZNYBHrEyUML0xr5NJ6edFaaKbTFX9S9kQHlYfCP0Rit/boRIz4G+Avq6/4haEKJXdGGUnoolx+5MWW2BoA==
+ dependencies:
+ caniuse-lite "^1.0.30001027"
+ electron-to-chromium "^1.3.349"
+ node-releases "^1.1.49"
+
+bser@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+ dependencies:
+ node-int64 "^0.4.0"
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-indexof@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
+ integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
+ integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+bytes@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+ integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
+
+bytes@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+ integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+
+cacache@^12.0.2:
+ version "12.0.3"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390"
+ integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ infer-owner "^1.0.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
+cacache@^13.0.1:
+ version "13.0.1"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c"
+ integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==
+ dependencies:
+ chownr "^1.1.2"
+ figgy-pudding "^3.5.1"
+ fs-minipass "^2.0.0"
+ glob "^7.1.4"
+ graceful-fs "^4.2.2"
+ infer-owner "^1.0.4"
+ lru-cache "^5.1.1"
+ minipass "^3.0.0"
+ minipass-collect "^1.0.2"
+ minipass-flush "^1.0.5"
+ minipass-pipeline "^1.2.2"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ p-map "^3.0.0"
+ promise-inflight "^1.0.1"
+ rimraf "^2.7.1"
+ ssri "^7.0.0"
+ unique-filename "^1.1.1"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+call-me-maybe@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
+ integrity sha1-JtII6onje1y95gJQoV8DHBak1ms=
+
+caller-callsite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+ integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+ dependencies:
+ callsites "^2.0.0"
+
+caller-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+ integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+ dependencies:
+ caller-callsite "^2.0.0"
+
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camel-case@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+ integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=
+ dependencies:
+ no-case "^2.2.0"
+ upper-case "^1.1.1"
+
+camelcase@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42"
+ integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==
+
+camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+caniuse-api@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
+ integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-lite "^1.0.0"
+ lodash.memoize "^4.1.2"
+ lodash.uniq "^4.5.0"
+
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001023, caniuse-lite@^1.0.30001027:
+ version "1.0.30001027"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001027.tgz#283e2ef17d94889cc216a22c6f85303d78ca852d"
+ integrity sha512-7xvKeErvXZFtUItTHgNtLgS9RJpVnwBlWX8jSo/BO8VsF6deszemZSkJJJA1KOKrXuzZH4WALpAJdq5EyfgMLg==
+
+capture-exit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
+ integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==
+ dependencies:
+ rsvp "^4.8.4"
+
+case-sensitive-paths-webpack-plugin@2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7"
+ integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chardet@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
+chokidar@^2.0.2, chokidar@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+chokidar@^3.3.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450"
+ integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==
+ dependencies:
+ anymatch "~3.1.1"
+ braces "~3.0.2"
+ glob-parent "~5.1.0"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.3.0"
+ optionalDependencies:
+ fsevents "~2.1.2"
+
+chownr@^1.1.1, chownr@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+chrome-trace-event@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
+ integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
+ dependencies:
+ tslib "^1.9.0"
+
+ci-info@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+clean-css@^4.2.1:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78"
+ integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==
+ dependencies:
+ source-map "~0.6.0"
+
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
+cli-width@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+ integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
+
+cliui@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
+ integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+ wrap-ansi "^2.0.0"
+
+cliui@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+ dependencies:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
+clone-deep@^0.2.4:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6"
+ integrity sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=
+ dependencies:
+ for-own "^0.1.3"
+ is-plain-object "^2.0.1"
+ kind-of "^3.0.2"
+ lazy-cache "^1.0.3"
+ shallow-clone "^0.1.2"
+
+clone-deep@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
+ integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
+ dependencies:
+ is-plain-object "^2.0.4"
+ kind-of "^6.0.2"
+ shallow-clone "^3.0.0"
+
+clsx@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.0.tgz#62937c6adfea771247c34b54d320fb99624f5702"
+ integrity sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+coa@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
+ integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==
+ dependencies:
+ "@types/q" "^1.5.1"
+ chalk "^2.4.1"
+ q "^1.1.2"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0, color-convert@^1.9.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-string@^1.5.2:
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
+ integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==
+ dependencies:
+ color-name "^1.0.0"
+ simple-swizzle "^0.2.2"
+
+color@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10"
+ integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==
+ dependencies:
+ color-convert "^1.9.1"
+ color-string "^1.5.2"
+
+combined-stream@^1.0.6, combined-stream@~1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.11.0, commander@^2.20.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+ integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
+common-tags@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937"
+ integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+compose-function@3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f"
+ integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=
+ dependencies:
+ arity-n "^1.0.4"
+
+compressible@~2.0.16:
+ version "2.0.18"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+ integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+ dependencies:
+ mime-db ">= 1.43.0 < 2"
+
+compression@^1.7.4:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+ integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+ dependencies:
+ accepts "~1.3.5"
+ bytes "3.0.0"
+ compressible "~2.0.16"
+ debug "2.6.9"
+ on-headers "~1.0.2"
+ safe-buffer "5.1.2"
+ vary "~1.1.2"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+confusing-browser-globals@^1.0.9:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd"
+ integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==
+
+connect-history-api-fallback@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
+ integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
+
+console-browserify@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
+ integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+ integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+
+content-disposition@0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
+ integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
+ dependencies:
+ safe-buffer "5.1.2"
+
+content-type@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+convert-source-map@1.7.0, convert-source-map@^1.4.0, convert-source-map@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+convert-source-map@^0.3.3:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190"
+ integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA=
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+ integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
+
+cookie@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
+ integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-js-compat@^3.6.2:
+ version "3.6.4"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17"
+ integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==
+ dependencies:
+ browserslist "^4.8.3"
+ semver "7.0.0"
+
+core-js@^2.4.0:
+ version "2.6.11"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
+ integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
+
+core-js@^3.5.0:
+ version "3.6.4"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647"
+ integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cosmiconfig@^5.0.0, cosmiconfig@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+ integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+ dependencies:
+ import-fresh "^2.0.0"
+ is-directory "^0.3.1"
+ js-yaml "^3.13.1"
+ parse-json "^4.0.0"
+
+cosmiconfig@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
+ integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.1.0"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.7.2"
+
+create-ecdh@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
+ integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+cross-spawn@7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14"
+ integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+css-blank-pseudo@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5"
+ integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==
+ dependencies:
+ postcss "^7.0.5"
+
+css-color-names@0.0.4, css-color-names@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
+ integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
+
+css-declaration-sorter@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22"
+ integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==
+ dependencies:
+ postcss "^7.0.1"
+ timsort "^0.3.0"
+
+css-has-pseudo@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee"
+ integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==
+ dependencies:
+ postcss "^7.0.6"
+ postcss-selector-parser "^5.0.0-rc.4"
+
+css-loader@3.4.2:
+ version "3.4.2"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.4.2.tgz#d3fdb3358b43f233b78501c5ed7b1c6da6133202"
+ integrity sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==
+ dependencies:
+ camelcase "^5.3.1"
+ cssesc "^3.0.0"
+ icss-utils "^4.1.1"
+ loader-utils "^1.2.3"
+ normalize-path "^3.0.0"
+ postcss "^7.0.23"
+ postcss-modules-extract-imports "^2.0.0"
+ postcss-modules-local-by-default "^3.0.2"
+ postcss-modules-scope "^2.1.1"
+ postcss-modules-values "^3.0.0"
+ postcss-value-parser "^4.0.2"
+ schema-utils "^2.6.0"
+
+css-prefers-color-scheme@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4"
+ integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==
+ dependencies:
+ postcss "^7.0.5"
+
+css-select-base-adapter@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
+ integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
+
+css-select@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+ integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
+ dependencies:
+ boolbase "~1.0.0"
+ css-what "2.1"
+ domutils "1.5.1"
+ nth-check "~1.0.1"
+
+css-select@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef"
+ integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==
+ dependencies:
+ boolbase "^1.0.0"
+ css-what "^3.2.1"
+ domutils "^1.7.0"
+ nth-check "^1.0.2"
+
+css-tree@1.0.0-alpha.37:
+ version "1.0.0-alpha.37"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22"
+ integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==
+ dependencies:
+ mdn-data "2.0.4"
+ source-map "^0.6.1"
+
+css-unit-converter@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996"
+ integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=
+
+css-vendor@^2.0.7:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.7.tgz#4e6d53d953c187981576d6a542acc9fb57174bda"
+ integrity sha512-VS9Rjt79+p7M0WkPqcAza4Yq1ZHrsHrwf7hPL/bjQB+c1lwmAI+1FXxYTYt818D/50fFVflw0XKleiBN5RITkg==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ is-in-browser "^1.0.2"
+
+css-what@2.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
+ integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
+
+css-what@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1"
+ integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==
+
+css.escape@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
+ integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=
+
+css@^2.0.0, css@^2.2.3:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929"
+ integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==
+ dependencies:
+ inherits "^2.0.3"
+ source-map "^0.6.1"
+ source-map-resolve "^0.5.2"
+ urix "^0.1.0"
+
+cssdb@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0"
+ integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==
+
+cssesc@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703"
+ integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+cssnano-preset-default@^4.0.7:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76"
+ integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==
+ dependencies:
+ css-declaration-sorter "^4.0.1"
+ cssnano-util-raw-cache "^4.0.1"
+ postcss "^7.0.0"
+ postcss-calc "^7.0.1"
+ postcss-colormin "^4.0.3"
+ postcss-convert-values "^4.0.1"
+ postcss-discard-comments "^4.0.2"
+ postcss-discard-duplicates "^4.0.2"
+ postcss-discard-empty "^4.0.1"
+ postcss-discard-overridden "^4.0.1"
+ postcss-merge-longhand "^4.0.11"
+ postcss-merge-rules "^4.0.3"
+ postcss-minify-font-values "^4.0.2"
+ postcss-minify-gradients "^4.0.2"
+ postcss-minify-params "^4.0.2"
+ postcss-minify-selectors "^4.0.2"
+ postcss-normalize-charset "^4.0.1"
+ postcss-normalize-display-values "^4.0.2"
+ postcss-normalize-positions "^4.0.2"
+ postcss-normalize-repeat-style "^4.0.2"
+ postcss-normalize-string "^4.0.2"
+ postcss-normalize-timing-functions "^4.0.2"
+ postcss-normalize-unicode "^4.0.1"
+ postcss-normalize-url "^4.0.1"
+ postcss-normalize-whitespace "^4.0.2"
+ postcss-ordered-values "^4.1.2"
+ postcss-reduce-initial "^4.0.3"
+ postcss-reduce-transforms "^4.0.2"
+ postcss-svgo "^4.0.2"
+ postcss-unique-selectors "^4.0.1"
+
+cssnano-util-get-arguments@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f"
+ integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=
+
+cssnano-util-get-match@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d"
+ integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=
+
+cssnano-util-raw-cache@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282"
+ integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==
+ dependencies:
+ postcss "^7.0.0"
+
+cssnano-util-same-parent@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3"
+ integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==
+
+cssnano@^4.1.10:
+ version "4.1.10"
+ resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2"
+ integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==
+ dependencies:
+ cosmiconfig "^5.0.0"
+ cssnano-preset-default "^4.0.7"
+ is-resolvable "^1.0.0"
+ postcss "^7.0.0"
+
+csso@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.2.tgz#e5f81ab3a56b8eefb7f0092ce7279329f454de3d"
+ integrity sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==
+ dependencies:
+ css-tree "1.0.0-alpha.37"
+
+cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^1.0.0, cssstyle@^1.1.1:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1"
+ integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==
+ dependencies:
+ cssom "0.3.x"
+
+csstype@^2.2.0, csstype@^2.5.2, csstype@^2.6.5, csstype@^2.6.7:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098"
+ integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q==
+
+cyclist@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+ integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
+
+d@1, d@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
+ integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
+ dependencies:
+ es5-ext "^0.10.50"
+ type "^1.0.1"
+
+damerau-levenshtein@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791"
+ integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+data-urls@^1.0.0, data-urls@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe"
+ integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==
+ dependencies:
+ abab "^2.0.0"
+ whatwg-mimetype "^2.2.0"
+ whatwg-url "^7.0.0"
+
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.0.0, debug@^3.1.1, debug@^3.2.5:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ dependencies:
+ ms "^2.1.1"
+
+decamelize@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+deep-equal@^1.0.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
+ integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
+ dependencies:
+ is-arguments "^1.0.4"
+ is-date-object "^1.0.1"
+ is-regex "^1.0.4"
+ object-is "^1.0.1"
+ object-keys "^1.1.1"
+ regexp.prototype.flags "^1.2.0"
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+default-gateway@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
+ integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==
+ dependencies:
+ execa "^1.0.0"
+ ip-regex "^2.1.0"
+
+define-properties@^1.1.2, define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+del@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
+ integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==
+ dependencies:
+ "@types/glob" "^7.1.1"
+ globby "^6.1.0"
+ is-path-cwd "^2.0.0"
+ is-path-in-cwd "^2.0.0"
+ p-map "^2.0.0"
+ pify "^4.0.1"
+ rimraf "^2.6.3"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+des.js@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
+ integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+destroy@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+ integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+
+detect-newline@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
+ integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
+
+detect-node@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
+ integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==
+
+detect-port-alt@1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275"
+ integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==
+ dependencies:
+ address "^1.0.1"
+ debug "^2.6.0"
+
+diff-sequences@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5"
+ integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==
+
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+dir-glob@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
+ integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==
+ dependencies:
+ arrify "^1.0.1"
+ path-type "^3.0.0"
+
+dns-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
+ integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
+
+dns-packet@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
+ integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==
+ dependencies:
+ ip "^1.1.0"
+ safe-buffer "^5.0.1"
+
+dns-txt@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
+ integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=
+ dependencies:
+ buffer-indexof "^1.0.0"
+
+doctrine@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+dom-converter@^0.2:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+ integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+ dependencies:
+ utila "~0.4"
+
+dom-helpers@^5.0.1:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.3.tgz#7233248eb3a2d1f74aafca31e52c5299cc8ce821"
+ integrity sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw==
+ dependencies:
+ "@babel/runtime" "^7.6.3"
+ csstype "^2.6.7"
+
+dom-serializer@0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
+ integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
+ dependencies:
+ domelementtype "^2.0.1"
+ entities "^2.0.0"
+
+domain-browser@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+ integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
+domelementtype@1, domelementtype@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+ integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domelementtype@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d"
+ integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==
+
+domexception@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
+ integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==
+ dependencies:
+ webidl-conversions "^4.0.2"
+
+domhandler@^2.3.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
+ integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
+ dependencies:
+ domelementtype "1"
+
+domutils@1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+domutils@^1.5.1, domutils@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+ integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+dot-prop@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb"
+ integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==
+ dependencies:
+ is-obj "^2.0.0"
+
+dotenv-expand@5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0"
+ integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==
+
+dotenv@8.2.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
+ integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
+
+duplexer@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+electron-to-chromium@^1.3.341, electron-to-chromium@^1.3.349:
+ version "1.3.349"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.349.tgz#663f26a69d348a462df47b4d7ab162a2f29bbcb7"
+ integrity sha512-uEb2zs6EJ6OZIqaMsCSliYVgzE/f7/s1fLWqtvRtHg/v5KBF2xds974fUnyatfxIDgkqzQVwFtam5KExqywx0Q==
+
+elliptic@^6.0.0:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762"
+ integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emoji-regex@^7.0.1, emoji-regex@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+enhanced-resolve@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66"
+ integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.5.0"
+ tapable "^1.0.0"
+
+entities@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+ integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+
+entities@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4"
+ integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==
+
+errno@^0.1.3, errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+ integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2:
+ version "1.17.4"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184"
+ integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==
+ dependencies:
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.1.5"
+ is-regex "^1.0.5"
+ object-inspect "^1.7.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.0"
+ string.prototype.trimleft "^2.1.1"
+ string.prototype.trimright "^2.1.1"
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es5-ext@^0.10.35, es5-ext@^0.10.50:
+ version "0.10.53"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"
+ integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==
+ dependencies:
+ es6-iterator "~2.0.3"
+ es6-symbol "~3.1.3"
+ next-tick "~1.0.0"
+
+es6-iterator@2.0.3, es6-iterator@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+ integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
+ dependencies:
+ d "1"
+ es5-ext "^0.10.35"
+ es6-symbol "^3.1.1"
+
+es6-symbol@^3.1.1, es6-symbol@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
+ integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
+ dependencies:
+ d "^1.0.1"
+ ext "^1.1.2"
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
+ integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+escodegen@^1.11.0, escodegen@^1.9.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457"
+ integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
+eslint-config-react-app@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.0.tgz#135110ba56a9e378f7acfe5f36e2ae76a2317899"
+ integrity sha512-WrHjoGpKr1kLLiWDD81tme9jMM0hk5cMxasLSdyno6DdPt+IfLOrDJBVo6jN7tn4y1nzhs43TmUaZWO6Sf0blw==
+ dependencies:
+ confusing-browser-globals "^1.0.9"
+
+eslint-import-resolver-node@^0.3.2:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404"
+ integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==
+ dependencies:
+ debug "^2.6.9"
+ resolve "^1.13.1"
+
+eslint-loader@3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-3.0.3.tgz#e018e3d2722381d982b1201adb56819c73b480ca"
+ integrity sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==
+ dependencies:
+ fs-extra "^8.1.0"
+ loader-fs-cache "^1.0.2"
+ loader-utils "^1.2.3"
+ object-hash "^2.0.1"
+ schema-utils "^2.6.1"
+
+eslint-module-utils@^2.4.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz#7878f7504824e1b857dd2505b59a8e5eda26a708"
+ integrity sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==
+ dependencies:
+ debug "^2.6.9"
+ pkg-dir "^2.0.0"
+
+eslint-plugin-flowtype@4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.6.0.tgz#82b2bd6f21770e0e5deede0228e456cb35308451"
+ integrity sha512-W5hLjpFfZyZsXfo5anlu7HM970JBDqbEshAJUkeczP6BFCIfJXuiIBQXyberLRtOStT0OGPF8efeTbxlHk4LpQ==
+ dependencies:
+ lodash "^4.17.15"
+
+eslint-plugin-import@2.20.0:
+ version "2.20.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.0.tgz#d749a7263fb6c29980def8e960d380a6aa6aecaa"
+ integrity sha512-NK42oA0mUc8Ngn4kONOPsPB1XhbUvNHqF+g307dPV28aknPoiNnKLFd9em4nkswwepdF5ouieqv5Th/63U7YJQ==
+ dependencies:
+ array-includes "^3.0.3"
+ array.prototype.flat "^1.2.1"
+ contains-path "^0.1.0"
+ debug "^2.6.9"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.3.2"
+ eslint-module-utils "^2.4.1"
+ has "^1.0.3"
+ minimatch "^3.0.4"
+ object.values "^1.1.0"
+ read-pkg-up "^2.0.0"
+ resolve "^1.12.0"
+
+eslint-plugin-jsx-a11y@6.2.3:
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa"
+ integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==
+ dependencies:
+ "@babel/runtime" "^7.4.5"
+ aria-query "^3.0.0"
+ array-includes "^3.0.3"
+ ast-types-flow "^0.0.7"
+ axobject-query "^2.0.2"
+ damerau-levenshtein "^1.0.4"
+ emoji-regex "^7.0.2"
+ has "^1.0.3"
+ jsx-ast-utils "^2.2.1"
+
+eslint-plugin-react-hooks@^1.6.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04"
+ integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==
+
+eslint-plugin-react@7.18.0:
+ version "7.18.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.18.0.tgz#2317831284d005b30aff8afb7c4e906f13fa8e7e"
+ integrity sha512-p+PGoGeV4SaZRDsXqdj9OWcOrOpZn8gXoGPcIQTzo2IDMbAKhNDnME9myZWqO3Ic4R3YmwAZ1lDjWl2R2hMUVQ==
+ dependencies:
+ array-includes "^3.1.1"
+ doctrine "^2.1.0"
+ has "^1.0.3"
+ jsx-ast-utils "^2.2.3"
+ object.entries "^1.1.1"
+ object.fromentries "^2.0.2"
+ object.values "^1.1.1"
+ prop-types "^15.7.2"
+ resolve "^1.14.2"
+
+eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-scope@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
+ integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-utils@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+ integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
+ integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
+
+eslint@^6.6.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
+ integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ ajv "^6.10.0"
+ chalk "^2.1.0"
+ cross-spawn "^6.0.5"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ eslint-scope "^5.0.0"
+ eslint-utils "^1.4.3"
+ eslint-visitor-keys "^1.1.0"
+ espree "^6.1.2"
+ esquery "^1.0.1"
+ esutils "^2.0.2"
+ file-entry-cache "^5.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^5.0.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ inquirer "^7.0.0"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.3.0"
+ lodash "^4.17.14"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ optionator "^0.8.3"
+ progress "^2.0.0"
+ regexpp "^2.0.1"
+ semver "^6.1.2"
+ strip-ansi "^5.2.0"
+ strip-json-comments "^3.0.1"
+ table "^5.2.3"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
+espree@^6.1.2:
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d"
+ integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==
+ dependencies:
+ acorn "^7.1.0"
+ acorn-jsx "^5.1.0"
+ eslint-visitor-keys "^1.1.0"
+
+esprima@^4.0.0, esprima@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48"
+ integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==
+ dependencies:
+ estraverse "^4.0.0"
+
+esrecurse@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+ integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+ dependencies:
+ estraverse "^4.1.0"
+
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+esutils@^2.0.0, esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+
+eventemitter3@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb"
+ integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==
+
+events@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59"
+ integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==
+
+eventsource@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0"
+ integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==
+ dependencies:
+ original "^1.0.0"
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+exec-sh@^0.3.2:
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5"
+ integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==
+
+execa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^4.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+ integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expect@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca"
+ integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ ansi-styles "^3.2.0"
+ jest-get-type "^24.9.0"
+ jest-matcher-utils "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-regex-util "^24.9.0"
+
+express@^4.17.1:
+ version "4.17.1"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
+ integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
+ dependencies:
+ accepts "~1.3.7"
+ array-flatten "1.1.1"
+ body-parser "1.19.0"
+ content-disposition "0.5.3"
+ content-type "~1.0.4"
+ cookie "0.4.0"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~1.1.2"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "~1.1.2"
+ fresh "0.5.2"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.5"
+ qs "6.7.0"
+ range-parser "~1.2.1"
+ safe-buffer "5.1.2"
+ send "0.17.1"
+ serve-static "1.14.1"
+ setprototypeof "1.1.1"
+ statuses "~1.5.0"
+ type-is "~1.6.18"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
+ext@^1.1.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244"
+ integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==
+ dependencies:
+ type "^2.0.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+external-editor@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+
+fast-deep-equal@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
+ integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
+
+fast-glob@^2.0.2:
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d"
+ integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==
+ dependencies:
+ "@mrmlnc/readdir-enhanced" "^2.2.1"
+ "@nodelib/fs.stat" "^1.1.2"
+ glob-parent "^3.1.0"
+ is-glob "^4.0.0"
+ merge2 "^1.2.3"
+ micromatch "^3.1.10"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+faye-websocket@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
+ integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+faye-websocket@~0.11.1:
+ version "0.11.3"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e"
+ integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+fb-watchman@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+ integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
+ dependencies:
+ bser "2.1.1"
+
+figgy-pudding@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
+ integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
+
+figures@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec"
+ integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+ integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+ dependencies:
+ flat-cache "^2.0.1"
+
+file-loader@4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af"
+ integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==
+ dependencies:
+ loader-utils "^1.2.3"
+ schema-utils "^2.5.0"
+
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+filesize@6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.0.1.tgz#f850b509909c7c86f7e450ea19006c31c2ed3d2f"
+ integrity sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+finalhandler@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
+ integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ statuses "~1.5.0"
+ unpipe "~1.0.0"
+
+find-cache-dir@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
+ integrity sha1-yN765XyKUqinhPnjHFfHQumToLk=
+ dependencies:
+ commondir "^1.0.1"
+ mkdirp "^0.5.1"
+ pkg-dir "^1.0.0"
+
+find-cache-dir@^2.0.0, find-cache-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
+find-cache-dir@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.2.0.tgz#e7fe44c1abc1299f516146e563108fd1006c1874"
+ integrity sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^3.0.0"
+ pkg-dir "^4.1.0"
+
+find-up@4.1.0, find-up@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.0.0, find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+flat-cache@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+ integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+ dependencies:
+ flatted "^2.0.0"
+ rimraf "2.6.3"
+ write "1.0.3"
+
+flatted@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
+ integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
+
+flatten@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"
+ integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==
+
+flush-write-stream@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+ integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.3.6"
+
+follow-redirects@^1.0.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.10.0.tgz#01f5263aee921c6a54fb91667f08f4155ce169eb"
+ integrity sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ==
+ dependencies:
+ debug "^3.0.0"
+
+for-in@^0.1.3:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
+ integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=
+
+for-in@^1.0.1, for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+for-own@^0.1.3:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+ integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
+ dependencies:
+ for-in "^1.0.1"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+fork-ts-checker-webpack-plugin@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz#a1642c0d3e65f50c2cc1742e9c0a80f441f86b19"
+ integrity sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==
+ dependencies:
+ babel-code-frame "^6.22.0"
+ chalk "^2.4.1"
+ chokidar "^3.3.0"
+ micromatch "^3.1.10"
+ minimatch "^3.0.4"
+ semver "^5.6.0"
+ tapable "^1.0.0"
+ worker-rpc "^0.1.0"
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+forwarded@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+ integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+fs-extra@^4.0.2:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
+ integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
+ integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-minipass@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+ integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+ dependencies:
+ minipass "^3.0.0"
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@2.1.2, fsevents@~2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805"
+ integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==
+
+fsevents@^1.2.7:
+ version "1.2.11"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3"
+ integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==
+ dependencies:
+ bindings "^1.5.0"
+ nan "^2.12.1"
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+gensync@^1.0.0-beta.1:
+ version "1.0.0-beta.1"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
+ integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
+
+get-caller-file@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+ integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+
+get-caller-file@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-own-enumerable-property-symbols@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
+ integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
+
+get-stream@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-parent@^5.0.0, glob-parent@~5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2"
+ integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-to-regexp@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
+ integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
+
+glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-modules@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+ integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+ dependencies:
+ global-prefix "^3.0.0"
+
+global-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+ integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+ dependencies:
+ ini "^1.3.5"
+ kind-of "^6.0.2"
+ which "^1.3.1"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^12.1.0:
+ version "12.3.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13"
+ integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==
+ dependencies:
+ type-fest "^0.8.1"
+
+globby@8.0.2:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d"
+ integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==
+ dependencies:
+ array-union "^1.0.1"
+ dir-glob "2.0.0"
+ fast-glob "^2.0.2"
+ glob "^7.1.2"
+ ignore "^3.3.5"
+ pify "^3.0.0"
+ slash "^1.0.0"
+
+globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
+ integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
+
+growly@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+ integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
+
+gzip-size@5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274"
+ integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==
+ dependencies:
+ duplexer "^0.1.1"
+ pify "^4.0.1"
+
+handle-thing@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754"
+ integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~5.1.3:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
+ integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
+ dependencies:
+ ajv "^6.5.5"
+ har-schema "^2.0.0"
+
+harmony-reflect@^1.4.6:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9"
+ integrity sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-symbols@^1.0.0, has-symbols@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+ integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.0, has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+he@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+ integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+hex-color-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
+ integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hoist-non-react-statics@^3.2.1, hoist-non-react-statics@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+ integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+ dependencies:
+ react-is "^16.7.0"
+
+hosted-git-info@^2.1.4:
+ version "2.8.5"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c"
+ integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==
+
+hpack.js@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+ integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=
+ dependencies:
+ inherits "^2.0.1"
+ obuf "^1.0.0"
+ readable-stream "^2.0.1"
+ wbuf "^1.1.0"
+
+hsl-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e"
+ integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=
+
+hsla-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"
+ integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg=
+
+html-comment-regex@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
+ integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
+
+html-encoding-sniffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
+ integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
+ dependencies:
+ whatwg-encoding "^1.0.1"
+
+html-entities@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
+ integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=
+
+html-escaper@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491"
+ integrity sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==
+
+html-minifier-terser@^5.0.1:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.0.3.tgz#b33549b57be7f0357be0d0b892995aaed1ed90f8"
+ integrity sha512-It4No3H1V3Dhd/O0MePFdo0oX/M6u6YZTMw4My/010mT6vxdbqge7+0RoxGAmeSbKok6gjYZoP0p4rpZ2+J2yw==
+ dependencies:
+ camel-case "^3.0.0"
+ clean-css "^4.2.1"
+ commander "^4.0.0"
+ he "^1.2.0"
+ param-case "^2.1.1"
+ relateurl "^0.2.7"
+ terser "^4.3.9"
+
+html-webpack-plugin@4.0.0-beta.11:
+ version "4.0.0-beta.11"
+ resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz#3059a69144b5aecef97708196ca32f9e68677715"
+ integrity sha512-4Xzepf0qWxf8CGg7/WQM5qBB2Lc/NFI7MhU59eUDTkuQp3skZczH4UA1d6oQyDEIoMDgERVhRyTdtUPZ5s5HBg==
+ dependencies:
+ html-minifier-terser "^5.0.1"
+ loader-utils "^1.2.3"
+ lodash "^4.17.15"
+ pretty-error "^2.1.1"
+ tapable "^1.1.3"
+ util.promisify "1.0.0"
+
+htmlparser2@^3.3.0:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
+ integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
+ dependencies:
+ domelementtype "^1.3.1"
+ domhandler "^2.3.0"
+ domutils "^1.5.1"
+ entities "^1.1.1"
+ inherits "^2.0.1"
+ readable-stream "^3.1.1"
+
+http-deceiver@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+ integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
+
+http-errors@1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
+ integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-errors@~1.6.2:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
+http-errors@~1.7.2:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
+ integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+"http-parser-js@>=0.4.0 <0.4.11":
+ version "0.4.10"
+ resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4"
+ integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=
+
+http-proxy-middleware@0.19.1:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
+ integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==
+ dependencies:
+ http-proxy "^1.17.0"
+ is-glob "^4.0.0"
+ lodash "^4.17.11"
+ micromatch "^3.1.10"
+
+http-proxy@^1.17.0:
+ version "1.18.0"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a"
+ integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==
+ dependencies:
+ eventemitter3 "^4.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+hyphenate-style-name@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48"
+ integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==
+
+iconv-lite@0.4.24, iconv-lite@^0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+icss-utils@^4.0.0, icss-utils@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467"
+ integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==
+ dependencies:
+ postcss "^7.0.14"
+
+identity-obj-proxy@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14"
+ integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=
+ dependencies:
+ harmony-reflect "^1.4.6"
+
+ieee754@^1.1.4:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
+ integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
+ignore@^3.3.5:
+ version "3.3.10"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+ integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+
+ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+immer@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d"
+ integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==
+
+import-cwd@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
+ integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=
+ dependencies:
+ import-from "^2.1.0"
+
+import-fresh@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+ integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+ dependencies:
+ caller-path "^2.0.0"
+ resolve-from "^3.0.0"
+
+import-fresh@^3.0.0, import-fresh@^3.1.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
+ integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-from@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
+ integrity sha1-M1238qev/VOqpHHUuAId7ja387E=
+ dependencies:
+ resolve-from "^3.0.0"
+
+import-local@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+ dependencies:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+indexes-of@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+ integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
+
+infer-owner@^1.0.3, infer-owner@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@^1.3.5:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+inquirer@7.0.4, inquirer@^7.0.0:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703"
+ integrity sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ chalk "^2.4.2"
+ cli-cursor "^3.1.0"
+ cli-width "^2.0.0"
+ external-editor "^3.0.3"
+ figures "^3.0.0"
+ lodash "^4.17.15"
+ mute-stream "0.0.8"
+ run-async "^2.2.0"
+ rxjs "^6.5.3"
+ string-width "^4.1.0"
+ strip-ansi "^5.1.0"
+ through "^2.3.6"
+
+internal-ip@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
+ integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==
+ dependencies:
+ default-gateway "^4.2.0"
+ ipaddr.js "^1.9.0"
+
+invariant@^2.2.2, invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ dependencies:
+ loose-envify "^1.0.0"
+
+invert-kv@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
+ integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
+
+ip-regex@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
+ integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
+
+ip@^1.1.0, ip@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+ integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
+
+ipaddr.js@1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65"
+ integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==
+
+ipaddr.js@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+ integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
+is-absolute-url@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+ integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
+
+is-absolute-url@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698"
+ integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-arguments@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
+ integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-arrayish@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+ integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-buffer@^1.0.2, is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-callable@^1.1.4, is-callable@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
+ integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
+
+is-ci@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+ integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+ dependencies:
+ ci-info "^2.0.0"
+
+is-color-stop@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
+ integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=
+ dependencies:
+ css-color-names "^0.0.4"
+ hex-color-regex "^1.1.0"
+ hsl-regex "^1.0.0"
+ hsla-regex "^1.0.0"
+ rgb-regex "^1.0.1"
+ rgba-regex "^1.0.0"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
+ integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+ integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
+
+is-docker@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b"
+ integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+ integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-in-browser@^1.0.2, is-in-browser@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835"
+ integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
+ integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
+
+is-path-cwd@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+ integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
+
+is-path-in-cwd@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
+ integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==
+ dependencies:
+ is-path-inside "^2.1.0"
+
+is-path-inside@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
+ integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==
+ dependencies:
+ path-is-inside "^1.0.2"
+
+is-plain-obj@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
+is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-promise@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+ integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
+
+is-regex@^1.0.4, is-regex@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
+ integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==
+ dependencies:
+ has "^1.0.3"
+
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+ integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
+is-resolvable@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+ integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
+
+is-root@2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c"
+ integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==
+
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-string@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
+ integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
+
+is-svg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75"
+ integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==
+ dependencies:
+ html-comment-regex "^1.1.0"
+
+is-symbol@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
+ integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
+ dependencies:
+ has-symbols "^1.0.1"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+
+is-wsl@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d"
+ integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49"
+ integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==
+
+istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630"
+ integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==
+ dependencies:
+ "@babel/generator" "^7.4.0"
+ "@babel/parser" "^7.4.3"
+ "@babel/template" "^7.4.0"
+ "@babel/traverse" "^7.4.3"
+ "@babel/types" "^7.4.0"
+ istanbul-lib-coverage "^2.0.5"
+ semver "^6.0.0"
+
+istanbul-lib-report@^2.0.4:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33"
+ integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==
+ dependencies:
+ istanbul-lib-coverage "^2.0.5"
+ make-dir "^2.1.0"
+ supports-color "^6.1.0"
+
+istanbul-lib-source-maps@^3.0.1:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8"
+ integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==
+ dependencies:
+ debug "^4.1.1"
+ istanbul-lib-coverage "^2.0.5"
+ make-dir "^2.1.0"
+ rimraf "^2.6.3"
+ source-map "^0.6.1"
+
+istanbul-reports@^2.2.6:
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931"
+ integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==
+ dependencies:
+ html-escaper "^2.0.0"
+
+jest-changed-files@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039"
+ integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ execa "^1.0.0"
+ throat "^4.0.0"
+
+jest-cli@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af"
+ integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==
+ dependencies:
+ "@jest/core" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ import-local "^2.0.0"
+ is-ci "^2.0.0"
+ jest-config "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ prompts "^2.0.1"
+ realpath-native "^1.1.0"
+ yargs "^13.3.0"
+
+jest-config@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5"
+ integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/test-sequencer" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ babel-jest "^24.9.0"
+ chalk "^2.0.1"
+ glob "^7.1.1"
+ jest-environment-jsdom "^24.9.0"
+ jest-environment-node "^24.9.0"
+ jest-get-type "^24.9.0"
+ jest-jasmine2 "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ micromatch "^3.1.10"
+ pretty-format "^24.9.0"
+ realpath-native "^1.1.0"
+
+jest-diff@^24.0.0, jest-diff@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da"
+ integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==
+ dependencies:
+ chalk "^2.0.1"
+ diff-sequences "^24.9.0"
+ jest-get-type "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-docblock@^24.3.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2"
+ integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==
+ dependencies:
+ detect-newline "^2.1.0"
+
+jest-each@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05"
+ integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ jest-get-type "^24.9.0"
+ jest-util "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-environment-jsdom-fourteen@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-1.0.1.tgz#4cd0042f58b4ab666950d96532ecb2fc188f96fb"
+ integrity sha512-DojMX1sY+at5Ep+O9yME34CdidZnO3/zfPh8UW+918C5fIZET5vCjfkegixmsi7AtdYfkr4bPlIzmWnlvQkP7Q==
+ dependencies:
+ "@jest/environment" "^24.3.0"
+ "@jest/fake-timers" "^24.3.0"
+ "@jest/types" "^24.3.0"
+ jest-mock "^24.0.0"
+ jest-util "^24.0.0"
+ jsdom "^14.1.0"
+
+jest-environment-jsdom@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b"
+ integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==
+ dependencies:
+ "@jest/environment" "^24.9.0"
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ jest-mock "^24.9.0"
+ jest-util "^24.9.0"
+ jsdom "^11.5.1"
+
+jest-environment-node@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3"
+ integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==
+ dependencies:
+ "@jest/environment" "^24.9.0"
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ jest-mock "^24.9.0"
+ jest-util "^24.9.0"
+
+jest-get-type@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e"
+ integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==
+
+jest-haste-map@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d"
+ integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ anymatch "^2.0.0"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.1.15"
+ invariant "^2.2.4"
+ jest-serializer "^24.9.0"
+ jest-util "^24.9.0"
+ jest-worker "^24.9.0"
+ micromatch "^3.1.10"
+ sane "^4.0.3"
+ walker "^1.0.7"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+jest-jasmine2@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0"
+ integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==
+ dependencies:
+ "@babel/traverse" "^7.1.0"
+ "@jest/environment" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ co "^4.6.0"
+ expect "^24.9.0"
+ is-generator-fn "^2.0.0"
+ jest-each "^24.9.0"
+ jest-matcher-utils "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-snapshot "^24.9.0"
+ jest-util "^24.9.0"
+ pretty-format "^24.9.0"
+ throat "^4.0.0"
+
+jest-leak-detector@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a"
+ integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==
+ dependencies:
+ jest-get-type "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-matcher-utils@^24.0.0, jest-matcher-utils@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073"
+ integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==
+ dependencies:
+ chalk "^2.0.1"
+ jest-diff "^24.9.0"
+ jest-get-type "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-message-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3"
+ integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/stack-utils" "^1.0.1"
+ chalk "^2.0.1"
+ micromatch "^3.1.10"
+ slash "^2.0.0"
+ stack-utils "^1.0.1"
+
+jest-mock@^24.0.0, jest-mock@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6"
+ integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==
+ dependencies:
+ "@jest/types" "^24.9.0"
+
+jest-pnp-resolver@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a"
+ integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==
+
+jest-regex-util@^24.3.0, jest-regex-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636"
+ integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==
+
+jest-resolve-dependencies@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab"
+ integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-snapshot "^24.9.0"
+
+jest-resolve@24.9.0, jest-resolve@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321"
+ integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ browser-resolve "^1.11.3"
+ chalk "^2.0.1"
+ jest-pnp-resolver "^1.2.1"
+ realpath-native "^1.1.0"
+
+jest-runner@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42"
+ integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/environment" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.4.2"
+ exit "^0.1.2"
+ graceful-fs "^4.1.15"
+ jest-config "^24.9.0"
+ jest-docblock "^24.3.0"
+ jest-haste-map "^24.9.0"
+ jest-jasmine2 "^24.9.0"
+ jest-leak-detector "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-resolve "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-util "^24.9.0"
+ jest-worker "^24.6.0"
+ source-map-support "^0.5.6"
+ throat "^4.0.0"
+
+jest-runtime@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac"
+ integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/environment" "^24.9.0"
+ "@jest/source-map" "^24.3.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/yargs" "^13.0.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ glob "^7.1.3"
+ graceful-fs "^4.1.15"
+ jest-config "^24.9.0"
+ jest-haste-map "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-mock "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve "^24.9.0"
+ jest-snapshot "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ realpath-native "^1.1.0"
+ slash "^2.0.0"
+ strip-bom "^3.0.0"
+ yargs "^13.3.0"
+
+jest-serializer@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73"
+ integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==
+
+jest-snapshot@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba"
+ integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==
+ dependencies:
+ "@babel/types" "^7.0.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ expect "^24.9.0"
+ jest-diff "^24.9.0"
+ jest-get-type "^24.9.0"
+ jest-matcher-utils "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-resolve "^24.9.0"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ pretty-format "^24.9.0"
+ semver "^6.2.0"
+
+jest-util@^24.0.0, jest-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162"
+ integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==
+ dependencies:
+ "@jest/console" "^24.9.0"
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/source-map" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ callsites "^3.0.0"
+ chalk "^2.0.1"
+ graceful-fs "^4.1.15"
+ is-ci "^2.0.0"
+ mkdirp "^0.5.1"
+ slash "^2.0.0"
+ source-map "^0.6.0"
+
+jest-validate@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab"
+ integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ camelcase "^5.3.1"
+ chalk "^2.0.1"
+ jest-get-type "^24.9.0"
+ leven "^3.1.0"
+ pretty-format "^24.9.0"
+
+jest-watch-typeahead@0.4.2:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.4.2.tgz#e5be959698a7fa2302229a5082c488c3c8780a4a"
+ integrity sha512-f7VpLebTdaXs81rg/oj4Vg/ObZy2QtGzAmGLNsqUS5G5KtSN68tFcIsbvNODfNyQxU78g7D8x77o3bgfBTR+2Q==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ chalk "^2.4.1"
+ jest-regex-util "^24.9.0"
+ jest-watcher "^24.3.0"
+ slash "^3.0.0"
+ string-length "^3.1.0"
+ strip-ansi "^5.0.0"
+
+jest-watcher@^24.3.0, jest-watcher@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b"
+ integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==
+ dependencies:
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/yargs" "^13.0.0"
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.1"
+ jest-util "^24.9.0"
+ string-length "^2.0.0"
+
+jest-worker@^24.6.0, jest-worker@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5"
+ integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==
+ dependencies:
+ merge-stream "^2.0.0"
+ supports-color "^6.1.0"
+
+jest-worker@^25.1.0:
+ version "25.1.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.1.0.tgz#75d038bad6fdf58eba0d2ec1835856c497e3907a"
+ integrity sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg==
+ dependencies:
+ merge-stream "^2.0.0"
+ supports-color "^7.0.0"
+
+jest@24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171"
+ integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==
+ dependencies:
+ import-local "^2.0.0"
+ jest-cli "^24.9.0"
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+ integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+js-yaml@^3.13.1:
+ version "3.13.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
+ integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+jsdom@^11.5.1:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8"
+ integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==
+ dependencies:
+ abab "^2.0.0"
+ acorn "^5.5.3"
+ acorn-globals "^4.1.0"
+ array-equal "^1.0.0"
+ cssom ">= 0.3.2 < 0.4.0"
+ cssstyle "^1.0.0"
+ data-urls "^1.0.0"
+ domexception "^1.0.1"
+ escodegen "^1.9.1"
+ html-encoding-sniffer "^1.0.2"
+ left-pad "^1.3.0"
+ nwsapi "^2.0.7"
+ parse5 "4.0.0"
+ pn "^1.1.0"
+ request "^2.87.0"
+ request-promise-native "^1.0.5"
+ sax "^1.2.4"
+ symbol-tree "^3.2.2"
+ tough-cookie "^2.3.4"
+ w3c-hr-time "^1.0.1"
+ webidl-conversions "^4.0.2"
+ whatwg-encoding "^1.0.3"
+ whatwg-mimetype "^2.1.0"
+ whatwg-url "^6.4.1"
+ ws "^5.2.0"
+ xml-name-validator "^3.0.0"
+
+jsdom@^14.1.0:
+ version "14.1.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-14.1.0.tgz#916463b6094956b0a6c1782c94e380cd30e1981b"
+ integrity sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==
+ dependencies:
+ abab "^2.0.0"
+ acorn "^6.0.4"
+ acorn-globals "^4.3.0"
+ array-equal "^1.0.0"
+ cssom "^0.3.4"
+ cssstyle "^1.1.1"
+ data-urls "^1.1.0"
+ domexception "^1.0.1"
+ escodegen "^1.11.0"
+ html-encoding-sniffer "^1.0.2"
+ nwsapi "^2.1.3"
+ parse5 "5.1.0"
+ pn "^1.1.0"
+ request "^2.88.0"
+ request-promise-native "^1.0.5"
+ saxes "^3.1.9"
+ symbol-tree "^3.2.2"
+ tough-cookie "^2.5.0"
+ w3c-hr-time "^1.0.1"
+ w3c-xmlserializer "^1.1.2"
+ webidl-conversions "^4.0.2"
+ whatwg-encoding "^1.0.5"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^7.0.0"
+ ws "^6.1.2"
+ xml-name-validator "^3.0.0"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
+ dependencies:
+ jsonify "~0.0.0"
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json3@^3.3.2:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
+ integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+json5@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6"
+ integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==
+ dependencies:
+ minimist "^1.2.0"
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+ integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+jss-plugin-camel-case@^10.0.3:
+ version "10.0.4"
+ resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.4.tgz#3dedecec1e5bba0bf6141c2c05e2ab11ea4b468d"
+ integrity sha512-+wnqxJsyfUnOn0LxVg3GgZBSjfBCrjxwx7LFxwVTUih0ceGaXKZoieheNOaTo5EM4w8bt1nbb8XonpQCj67C6A==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ hyphenate-style-name "^1.0.3"
+ jss "10.0.4"
+
+jss-plugin-default-unit@^10.0.3:
+ version "10.0.4"
+ resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.4.tgz#df03885de20f20a1fc1c21bdb7c62e865ee400d9"
+ integrity sha512-T0mhL/Ogp/quvod/jAHEqKvptLDxq7Cj3a+7zRuqK8HxUYkftptN89wJElZC3rshhNKiogkEYhCWenpJdFvTBg==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ jss "10.0.4"
+
+jss-plugin-global@^10.0.3:
+ version "10.0.4"
+ resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.0.4.tgz#412245b56133cc88bec654a70d82d5922619f4c5"
+ integrity sha512-N8n9/GHENZce+sqE4UYiZiJtI+t+erT/BypHOrNYAfIoNEj7OYsOEKfIo2P0GpLB3QyDAYf5eo9XNdZ8veEkUA==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ jss "10.0.4"
+
+jss-plugin-nested@^10.0.3:
+ version "10.0.4"
+ resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.0.4.tgz#4d15ad13995fb6e4125618006473a096d2475d75"
+ integrity sha512-QM21BKVt8LDeoRfowvAMh/s+/89VYrreIIE6ch4pvw0oAXDWw1iorUPlqLZ7uCO3UL0uFtQhJq3QMLN6Lr1v0A==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ jss "10.0.4"
+ tiny-warning "^1.0.2"
+
+jss-plugin-props-sort@^10.0.3:
+ version "10.0.4"
+ resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.4.tgz#43c880ff8dfcf858f809f663ece5e65a1d945b5a"
+ integrity sha512-WoETdOCjGskuin/OMt2uEdDPLZF3vfQuHXF+XUHGJrq0BAapoyGQDcv37SeReDlkRAbVXkEZPsIMvYrgHSHFiA==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ jss "10.0.4"
+
+jss-plugin-rule-value-function@^10.0.3:
+ version "10.0.4"
+ resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.4.tgz#2f4cf4a86ad3eba875bb48cb9f4a7ed35cb354e7"
+ integrity sha512-0hrzOSWRF5ABJGaHrlnHbYZjU877Ofzfh2id3uLtBvemGQLHI+ldoL8/+6iPSRa7M8z8Ngfg2vfYhKjUA5gA0g==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ jss "10.0.4"
+
+jss-plugin-vendor-prefixer@^10.0.3:
+ version "10.0.4"
+ resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.4.tgz#1626ef612a4541cff17cf96815e1740155214ed2"
+ integrity sha512-4JgEbcrdeMda1qvxTm1CnxFJAWVV++VLpP46HNTrfH7VhVlvUpihnUNs2gAlKuRT/XSBuiWeLAkrTqF4NVrPig==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ css-vendor "^2.0.7"
+ jss "10.0.4"
+
+jss@10.0.4, jss@^10.0.3:
+ version "10.0.4"
+ resolved "https://registry.yarnpkg.com/jss/-/jss-10.0.4.tgz#46ebdde1c40c9a079d64f3334cb88ae28fd90bfd"
+ integrity sha512-GqHmeDK83qbqMAVjxyPfN1qJVTKZne533a9bdCrllZukUM8npG/k+JumEPI86IIB5ifaZAHG2HAsUziyxOiooQ==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ csstype "^2.6.5"
+ is-in-browser "^1.1.3"
+ tiny-warning "^1.0.2"
+
+jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f"
+ integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==
+ dependencies:
+ array-includes "^3.0.3"
+ object.assign "^4.1.0"
+
+killable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
+ integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==
+
+kind-of@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5"
+ integrity sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=
+ dependencies:
+ is-buffer "^1.0.2"
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+last-call-webpack-plugin@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555"
+ integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==
+ dependencies:
+ lodash "^4.17.5"
+ webpack-sources "^1.1.0"
+
+lazy-cache@^0.2.3:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65"
+ integrity sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+ integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
+
+lcid@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
+ integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
+ dependencies:
+ invert-kv "^2.0.0"
+
+left-pad@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
+ integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
+
+leven@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+levenary@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77"
+ integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==
+ dependencies:
+ leven "^3.1.0"
+
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+lines-and-columns@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
+ integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+load-json-file@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
+ integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^4.0.0"
+ pify "^3.0.0"
+ strip-bom "^3.0.0"
+
+loader-fs-cache@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz#54cedf6b727e1779fd8f01205f05f6e88706f086"
+ integrity sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==
+ dependencies:
+ find-cache-dir "^0.1.1"
+ mkdirp "0.5.1"
+
+loader-runner@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
+ integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^2.0.0"
+ json5 "^1.0.1"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+lodash._reinterpolate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+ integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
+
+lodash.memoize@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+ integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+
+lodash.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+ integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+
+lodash.template@^4.4.0, lodash.template@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab"
+ integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==
+ dependencies:
+ lodash._reinterpolate "^3.0.0"
+ lodash.templatesettings "^4.0.0"
+
+lodash.templatesettings@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33"
+ integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==
+ dependencies:
+ lodash._reinterpolate "^3.0.0"
+
+lodash.uniq@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+ integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
+
+"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5:
+ version "4.17.15"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+ integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
+loglevel@^1.6.6:
+ version "1.6.7"
+ resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56"
+ integrity sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A==
+
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lower-case@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
+ integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw=
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+make-dir@^2.0.0, make-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+make-dir@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392"
+ integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==
+ dependencies:
+ semver "^6.0.0"
+
+makeerror@1.0.x:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+ integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
+ dependencies:
+ tmpl "1.0.x"
+
+mamacro@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
+ integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==
+
+map-age-cleaner@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
+ integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
+ dependencies:
+ p-defer "^1.0.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+mdn-data@2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
+ integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+
+mem@^4.0.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
+ integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
+ dependencies:
+ map-age-cleaner "^0.1.1"
+ mimic-fn "^2.0.0"
+ p-is-promise "^2.0.0"
+
+memory-fs@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+memory-fs@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+ integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+merge-deep@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/merge-deep/-/merge-deep-3.0.2.tgz#f39fa100a4f1bd34ff29f7d2bf4508fbb8d83ad2"
+ integrity sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==
+ dependencies:
+ arr-union "^3.1.0"
+ clone-deep "^0.2.4"
+ kind-of "^3.0.2"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.2.3:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81"
+ integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+microevent.ts@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0"
+ integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==
+
+micromatch@^3.1.10, micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@1.43.0, "mime-db@>= 1.43.0 < 2":
+ version "1.43.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58"
+ integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==
+
+mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
+ version "2.1.26"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06"
+ integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==
+ dependencies:
+ mime-db "1.43.0"
+
+mime@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mime@^2.4.4:
+ version "2.4.4"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5"
+ integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==
+
+mimic-fn@^2.0.0, mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+min-indent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.0.tgz#cfc45c37e9ec0d8f0a0ec3dd4ef7f7c3abe39256"
+ integrity sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=
+
+mini-css-extract-plugin@0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e"
+ integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==
+ dependencies:
+ loader-utils "^1.1.0"
+ normalize-url "1.9.1"
+ schema-utils "^1.0.0"
+ webpack-sources "^1.1.0"
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+minimatch@3.0.4, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.1, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+minipass-collect@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
+ integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass-flush@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+ integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass-pipeline@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a"
+ integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass@^3.0.0, minipass@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5"
+ integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==
+ dependencies:
+ yallist "^4.0.0"
+
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mixin-object@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
+ integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=
+ dependencies:
+ for-in "^0.1.3"
+ is-extendable "^0.1.1"
+
+mkdirp@0.5.1, mkdirp@^0.5.1, mkdirp@~0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+ integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+
+ms@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+multicast-dns-service-types@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
+ integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=
+
+multicast-dns@^6.0.1:
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
+ integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==
+ dependencies:
+ dns-packet "^1.3.1"
+ thunky "^1.0.2"
+
+mute-stream@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+ integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+
+nan@^2.12.1:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
+ integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+negotiator@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+ integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+
+neo-async@^2.5.0, neo-async@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
+ integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
+
+next-tick@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
+ integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+no-case@^2.2.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
+ integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==
+ dependencies:
+ lower-case "^1.1.1"
+
+node-forge@0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
+ integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
+
+node-libs-browser@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^3.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.1"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
+
+node-modules-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
+ integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
+
+node-notifier@^5.4.2:
+ version "5.4.3"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50"
+ integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==
+ dependencies:
+ growly "^1.3.0"
+ is-wsl "^1.1.0"
+ semver "^5.5.0"
+ shellwords "^0.1.1"
+ which "^1.3.0"
+
+node-releases@^1.1.47, node-releases@^1.1.49:
+ version "1.1.49"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.49.tgz#67ba5a3fac2319262675ef864ed56798bb33b93e"
+ integrity sha512-xH8t0LS0disN0mtRCh+eByxFPie+msJUBL/lJDBuap53QGiYPa9joh83K4pCZgWJ+2L4b9h88vCVdXQ60NO2bg==
+ dependencies:
+ semver "^6.3.0"
+
+normalize-package-data@^2.3.2:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
+
+normalize-url@1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
+ integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=
+ dependencies:
+ object-assign "^4.0.1"
+ prepend-http "^1.0.0"
+ query-string "^4.1.0"
+ sort-keys "^1.0.0"
+
+normalize-url@^3.0.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
+ integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+nth-check@^1.0.2, nth-check@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+ integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+ dependencies:
+ boolbase "~1.0.0"
+
+num2fraction@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+ integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+nwsapi@^2.0.7, nwsapi@^2.1.3:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
+ integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-hash@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.2.tgz#f7b2212dbe07d07e340ccd6004c59504fc4015cf"
+ integrity sha512-b+2AKjAf6uQlxxv8ChHdM+VT4eeX+ZSwv+pk2xIXZWbo+yxn4/En1iC+GHe/OFYa9on0AhFF2PvuAcFHoiiHaA==
+
+object-inspect@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
+ integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
+
+object-is@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4"
+ integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==
+
+object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-path@0.11.4:
+ version "0.11.4"
+ resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949"
+ integrity sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+ integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.1"
+ has-symbols "^1.0.0"
+ object-keys "^1.0.11"
+
+object.entries@^1.1.0, object.entries@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b"
+ integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+object.fromentries@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9"
+ integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649"
+ integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+object.values@^1.1.0, object.values@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
+ integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+obuf@^1.0.0, obuf@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
+ integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+ dependencies:
+ ee-first "1.1.1"
+
+on-headers@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+ integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+onetime@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
+ integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+open@^7.0.2:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/open/-/open-7.0.2.tgz#fb3681f11f157f2361d2392307548ca1792960e8"
+ integrity sha512-70E/pFTPr7nZ9nLDPNTcj3IVqnNvKuP4VsBmoKV9YGTnChe0mlS3C4qM7qKarhZ8rGaHKLfo+vBTHXDp6ZSyLQ==
+ dependencies:
+ is-docker "^2.0.0"
+ is-wsl "^2.1.1"
+
+opn@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
+ integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==
+ dependencies:
+ is-wsl "^1.1.0"
+
+optimize-css-assets-webpack-plugin@5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz#e2f1d4d94ad8c0af8967ebd7cf138dcb1ef14572"
+ integrity sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==
+ dependencies:
+ cssnano "^4.1.10"
+ last-call-webpack-plugin "^3.0.0"
+
+optionator@^0.8.1, optionator@^0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.6"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ word-wrap "~1.2.3"
+
+original@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
+ integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==
+ dependencies:
+ url-parse "^1.4.3"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+os-locale@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
+ integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
+ dependencies:
+ execa "^1.0.0"
+ lcid "^2.0.0"
+ mem "^4.0.0"
+
+os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+p-defer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
+ integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
+
+p-each-series@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71"
+ integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=
+ dependencies:
+ p-reduce "^1.0.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-is-promise@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
+ integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e"
+ integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-map@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+ integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+
+p-map@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d"
+ integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
+p-reduce@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
+ integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=
+
+p-retry@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328"
+ integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==
+ dependencies:
+ retry "^0.12.0"
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+pako@~1.0.5:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
+ integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+
+parallel-transform@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+ integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
+ dependencies:
+ cyclist "^1.0.1"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+param-case@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
+ integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc=
+ dependencies:
+ no-case "^2.2.0"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-asn1@^5.0.0:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
+ integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+ safe-buffer "^5.1.1"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+parse-json@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f"
+ integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+ lines-and-columns "^1.1.6"
+
+parse5@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
+ integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
+
+parse5@5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2"
+ integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==
+
+parseurl@~1.3.2, parseurl@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-is-inside@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+ dependencies:
+ pify "^2.0.0"
+
+path-type@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+ dependencies:
+ pify "^3.0.0"
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+pbkdf2@^3.0.3:
+ version "3.0.17"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
+ integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+picomatch@^2.0.4, picomatch@^2.0.7:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a"
+ integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pirates@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
+ integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
+ dependencies:
+ node-modules-regexp "^1.0.0"
+
+pkg-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+ integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q=
+ dependencies:
+ find-up "^1.0.0"
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+ dependencies:
+ find-up "^2.1.0"
+
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
+pkg-dir@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+pkg-up@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
+ integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==
+ dependencies:
+ find-up "^3.0.0"
+
+pn@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
+ integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
+
+pnp-webpack-plugin@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.0.tgz#d5c068013a2fdc82224ca50ed179c8fba9036a8e"
+ integrity sha512-ZcMGn/xF/fCOq+9kWMP9vVVxjIkMCja72oy3lziR7UHy0hHFZ57iVpQ71OtveVbmzeCmphBg8pxNdk/hlK99aQ==
+ dependencies:
+ ts-pnp "^1.1.2"
+
+popper.js@^1.14.1:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b"
+ integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==
+
+portfinder@^1.0.25:
+ version "1.0.25"
+ resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca"
+ integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==
+ dependencies:
+ async "^2.6.2"
+ debug "^3.1.1"
+ mkdirp "^0.5.1"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+postcss-attribute-case-insensitive@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880"
+ integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-selector-parser "^6.0.2"
+
+postcss-browser-comments@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz#1248d2d935fb72053c8e1f61a84a57292d9f65e9"
+ integrity sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig==
+ dependencies:
+ postcss "^7"
+
+postcss-calc@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436"
+ integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==
+ dependencies:
+ css-unit-converter "^1.1.1"
+ postcss "^7.0.5"
+ postcss-selector-parser "^5.0.0-rc.4"
+ postcss-value-parser "^3.3.1"
+
+postcss-color-functional-notation@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0"
+ integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-values-parser "^2.0.0"
+
+postcss-color-gray@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547"
+ integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==
+ dependencies:
+ "@csstools/convert-colors" "^1.4.0"
+ postcss "^7.0.5"
+ postcss-values-parser "^2.0.0"
+
+postcss-color-hex-alpha@^5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388"
+ integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==
+ dependencies:
+ postcss "^7.0.14"
+ postcss-values-parser "^2.0.1"
+
+postcss-color-mod-function@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d"
+ integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==
+ dependencies:
+ "@csstools/convert-colors" "^1.4.0"
+ postcss "^7.0.2"
+ postcss-values-parser "^2.0.0"
+
+postcss-color-rebeccapurple@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77"
+ integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-values-parser "^2.0.0"
+
+postcss-colormin@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381"
+ integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==
+ dependencies:
+ browserslist "^4.0.0"
+ color "^3.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-convert-values@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f"
+ integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-custom-media@^7.0.8:
+ version "7.0.8"
+ resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c"
+ integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==
+ dependencies:
+ postcss "^7.0.14"
+
+postcss-custom-properties@^8.0.11:
+ version "8.0.11"
+ resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97"
+ integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==
+ dependencies:
+ postcss "^7.0.17"
+ postcss-values-parser "^2.0.1"
+
+postcss-custom-selectors@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba"
+ integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-selector-parser "^5.0.0-rc.3"
+
+postcss-dir-pseudo-class@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2"
+ integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-selector-parser "^5.0.0-rc.3"
+
+postcss-discard-comments@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033"
+ integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-discard-duplicates@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb"
+ integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-discard-empty@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765"
+ integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-discard-overridden@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57"
+ integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-double-position-gradients@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e"
+ integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==
+ dependencies:
+ postcss "^7.0.5"
+ postcss-values-parser "^2.0.0"
+
+postcss-env-function@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7"
+ integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-values-parser "^2.0.0"
+
+postcss-flexbugs-fixes@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz#e094a9df1783e2200b7b19f875dcad3b3aff8b20"
+ integrity sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-focus-visible@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e"
+ integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-focus-within@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680"
+ integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-font-variant@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz#71dd3c6c10a0d846c5eda07803439617bbbabacc"
+ integrity sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-gap-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715"
+ integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-image-set-function@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288"
+ integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-values-parser "^2.0.0"
+
+postcss-initial@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.2.tgz#f018563694b3c16ae8eaabe3c585ac6319637b2d"
+ integrity sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==
+ dependencies:
+ lodash.template "^4.5.0"
+ postcss "^7.0.2"
+
+postcss-lab-function@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e"
+ integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==
+ dependencies:
+ "@csstools/convert-colors" "^1.4.0"
+ postcss "^7.0.2"
+ postcss-values-parser "^2.0.0"
+
+postcss-load-config@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003"
+ integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==
+ dependencies:
+ cosmiconfig "^5.0.0"
+ import-cwd "^2.0.0"
+
+postcss-loader@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d"
+ integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==
+ dependencies:
+ loader-utils "^1.1.0"
+ postcss "^7.0.0"
+ postcss-load-config "^2.0.0"
+ schema-utils "^1.0.0"
+
+postcss-logical@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5"
+ integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-media-minmax@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5"
+ integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-merge-longhand@^4.0.11:
+ version "4.0.11"
+ resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24"
+ integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==
+ dependencies:
+ css-color-names "0.0.4"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ stylehacks "^4.0.0"
+
+postcss-merge-rules@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650"
+ integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-api "^3.0.0"
+ cssnano-util-same-parent "^4.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+ vendors "^1.0.0"
+
+postcss-minify-font-values@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6"
+ integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-minify-gradients@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471"
+ integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ is-color-stop "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-minify-params@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874"
+ integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ browserslist "^4.0.0"
+ cssnano-util-get-arguments "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ uniqs "^2.0.0"
+
+postcss-minify-selectors@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8"
+ integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+
+postcss-modules-extract-imports@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e"
+ integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==
+ dependencies:
+ postcss "^7.0.5"
+
+postcss-modules-local-by-default@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915"
+ integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==
+ dependencies:
+ icss-utils "^4.1.1"
+ postcss "^7.0.16"
+ postcss-selector-parser "^6.0.2"
+ postcss-value-parser "^4.0.0"
+
+postcss-modules-scope@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz#33d4fc946602eb5e9355c4165d68a10727689dba"
+ integrity sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ==
+ dependencies:
+ postcss "^7.0.6"
+ postcss-selector-parser "^6.0.0"
+
+postcss-modules-values@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10"
+ integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==
+ dependencies:
+ icss-utils "^4.0.0"
+ postcss "^7.0.6"
+
+postcss-nesting@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052"
+ integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-normalize-charset@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4"
+ integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-normalize-display-values@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a"
+ integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-positions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f"
+ integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-repeat-style@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c"
+ integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-string@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c"
+ integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==
+ dependencies:
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-timing-functions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9"
+ integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-unicode@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb"
+ integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==
+ dependencies:
+ browserslist "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-url@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1"
+ integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==
+ dependencies:
+ is-absolute-url "^2.0.0"
+ normalize-url "^3.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-whitespace@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82"
+ integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize@8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-8.0.1.tgz#90e80a7763d7fdf2da6f2f0f82be832ce4f66776"
+ integrity sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ==
+ dependencies:
+ "@csstools/normalize.css" "^10.1.0"
+ browserslist "^4.6.2"
+ postcss "^7.0.17"
+ postcss-browser-comments "^3.0.0"
+ sanitize.css "^10.0.0"
+
+postcss-ordered-values@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee"
+ integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-overflow-shorthand@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30"
+ integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-page-break@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf"
+ integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-place@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62"
+ integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-values-parser "^2.0.0"
+
+postcss-preset-env@6.7.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5"
+ integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==
+ dependencies:
+ autoprefixer "^9.6.1"
+ browserslist "^4.6.4"
+ caniuse-lite "^1.0.30000981"
+ css-blank-pseudo "^0.1.4"
+ css-has-pseudo "^0.10.0"
+ css-prefers-color-scheme "^3.1.1"
+ cssdb "^4.4.0"
+ postcss "^7.0.17"
+ postcss-attribute-case-insensitive "^4.0.1"
+ postcss-color-functional-notation "^2.0.1"
+ postcss-color-gray "^5.0.0"
+ postcss-color-hex-alpha "^5.0.3"
+ postcss-color-mod-function "^3.0.3"
+ postcss-color-rebeccapurple "^4.0.1"
+ postcss-custom-media "^7.0.8"
+ postcss-custom-properties "^8.0.11"
+ postcss-custom-selectors "^5.1.2"
+ postcss-dir-pseudo-class "^5.0.0"
+ postcss-double-position-gradients "^1.0.0"
+ postcss-env-function "^2.0.2"
+ postcss-focus-visible "^4.0.0"
+ postcss-focus-within "^3.0.0"
+ postcss-font-variant "^4.0.0"
+ postcss-gap-properties "^2.0.0"
+ postcss-image-set-function "^3.0.1"
+ postcss-initial "^3.0.0"
+ postcss-lab-function "^2.0.1"
+ postcss-logical "^3.0.0"
+ postcss-media-minmax "^4.0.0"
+ postcss-nesting "^7.0.0"
+ postcss-overflow-shorthand "^2.0.0"
+ postcss-page-break "^2.0.0"
+ postcss-place "^4.0.1"
+ postcss-pseudo-class-any-link "^6.0.0"
+ postcss-replace-overflow-wrap "^3.0.0"
+ postcss-selector-matches "^4.0.0"
+ postcss-selector-not "^4.0.0"
+
+postcss-pseudo-class-any-link@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1"
+ integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-selector-parser "^5.0.0-rc.3"
+
+postcss-reduce-initial@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df"
+ integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-api "^3.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+
+postcss-reduce-transforms@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29"
+ integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-replace-overflow-wrap@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c"
+ integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-safe-parser@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea"
+ integrity sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-selector-matches@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff"
+ integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==
+ dependencies:
+ balanced-match "^1.0.0"
+ postcss "^7.0.2"
+
+postcss-selector-not@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz#c68ff7ba96527499e832724a2674d65603b645c0"
+ integrity sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==
+ dependencies:
+ balanced-match "^1.0.0"
+ postcss "^7.0.2"
+
+postcss-selector-parser@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270"
+ integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==
+ dependencies:
+ dot-prop "^5.2.0"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c"
+ integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==
+ dependencies:
+ cssesc "^2.0.0"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c"
+ integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==
+ dependencies:
+ cssesc "^3.0.0"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-svgo@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258"
+ integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==
+ dependencies:
+ is-svg "^3.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ svgo "^1.0.0"
+
+postcss-unique-selectors@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac"
+ integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ postcss "^7.0.0"
+ uniqs "^2.0.0"
+
+postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
+ integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
+
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9"
+ integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==
+
+postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f"
+ integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==
+ dependencies:
+ flatten "^1.0.2"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss@7.0.21:
+ version "7.0.21"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17"
+ integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==
+ dependencies:
+ chalk "^2.4.2"
+ source-map "^0.6.1"
+ supports-color "^6.1.0"
+
+postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.23, postcss@^7.0.26, postcss@^7.0.5, postcss@^7.0.6:
+ version "7.0.26"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.26.tgz#5ed615cfcab35ba9bbb82414a4fa88ea10429587"
+ integrity sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==
+ dependencies:
+ chalk "^2.4.2"
+ source-map "^0.6.1"
+ supports-color "^6.1.0"
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+prepend-http@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+ integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
+
+pretty-bytes@^5.1.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2"
+ integrity sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==
+
+pretty-error@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
+ integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=
+ dependencies:
+ renderkid "^2.0.1"
+ utila "~0.4"
+
+pretty-format@^24.0.0, pretty-format@^24.3.0, pretty-format@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9"
+ integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ ansi-regex "^4.0.0"
+ ansi-styles "^3.2.0"
+ react-is "^16.8.4"
+
+private@^0.1.6:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+ integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+progress@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
+promise@^8.0.3:
+ version "8.0.3"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-8.0.3.tgz#f592e099c6cddc000d538ee7283bb190452b0bf6"
+ integrity sha512-HeRDUL1RJiLhyA0/grn+PTShlBAcLuh/1BJGtrvjwbvRDCTLLMEz9rOGCV+R3vHY4MixIuoMEd9Yq/XvsTPcjw==
+ dependencies:
+ asap "~2.0.6"
+
+prompts@^2.0.1:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4"
+ integrity sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.3"
+
+prop-types@^15.6.2, prop-types@^15.7.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
+proxy-addr@~2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
+ integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==
+ dependencies:
+ forwarded "~0.1.2"
+ ipaddr.js "1.9.0"
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+psl@^1.1.28:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c"
+ integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==
+
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0, punycode@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+q@^1.1.2:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
+qs@6.7.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
+ integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+query-string@^4.1.0:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+ integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s=
+ dependencies:
+ object-assign "^4.1.0"
+ strict-uri-encode "^1.0.0"
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+querystringify@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
+ integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
+
+raf@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
+ integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
+ dependencies:
+ performance-now "^2.1.0"
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+range-parser@^1.2.1, range-parser@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
+ integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
+ dependencies:
+ bytes "3.1.0"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+react-app-polyfill@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz#890f8d7f2842ce6073f030b117de9130a5f385f0"
+ integrity sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g==
+ dependencies:
+ core-js "^3.5.0"
+ object-assign "^4.1.1"
+ promise "^8.0.3"
+ raf "^3.4.1"
+ regenerator-runtime "^0.13.3"
+ whatwg-fetch "^3.0.0"
+
+react-dev-utils@^10.2.0:
+ version "10.2.0"
+ resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-10.2.0.tgz#b11cc48aa2be2502fb3c27a50d1dfa95cfa9dfe0"
+ integrity sha512-MwrvQW2TFjLblhqpDNeqCXHBkz3G5vc7k4wntgutAJZX4ia3o07eGKo6uYGhUOeJ0hfOxcpJFNFk7+4XCc1S8g==
+ dependencies:
+ "@babel/code-frame" "7.8.3"
+ address "1.1.2"
+ browserslist "4.8.6"
+ chalk "2.4.2"
+ cross-spawn "7.0.1"
+ detect-port-alt "1.1.6"
+ escape-string-regexp "2.0.0"
+ filesize "6.0.1"
+ find-up "4.1.0"
+ fork-ts-checker-webpack-plugin "3.1.1"
+ global-modules "2.0.0"
+ globby "8.0.2"
+ gzip-size "5.1.1"
+ immer "1.10.0"
+ inquirer "7.0.4"
+ is-root "2.1.0"
+ loader-utils "1.2.3"
+ open "^7.0.2"
+ pkg-up "3.1.0"
+ react-error-overlay "^6.0.6"
+ recursive-readdir "2.2.2"
+ shell-quote "1.7.2"
+ strip-ansi "6.0.0"
+ text-table "0.2.0"
+
+react-dom@^16.12.0:
+ version "16.12.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11"
+ integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ scheduler "^0.18.0"
+
+react-error-overlay@^6.0.6:
+ version "6.0.6"
+ resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.6.tgz#ac4d9dc4c1b5c536c2c312bf66aa2b09bfa384e2"
+ integrity sha512-Yzpno3enVzSrSCnnljmr4b/2KUQSMZaPuqmS26t9k4nW7uwJk6STWmH9heNjPuvqUTO3jOSPkHoKgO4+Dw7uIw==
+
+react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.4:
+ version "16.12.0"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c"
+ integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==
+
+react-scripts@3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-3.4.0.tgz#f413680f0b5b937c8879ba1ffdae9b8c5b364bf5"
+ integrity sha512-pBqaAroFoHnFAkuX+uSK9Th1uEh2GYdGY2IG1I9/7HmuEf+ls3lLCk1p2GFYRSrLMz6ieQR/SyN6TLIGK3hKRg==
+ dependencies:
+ "@babel/core" "7.8.4"
+ "@svgr/webpack" "4.3.3"
+ "@typescript-eslint/eslint-plugin" "^2.10.0"
+ "@typescript-eslint/parser" "^2.10.0"
+ babel-eslint "10.0.3"
+ babel-jest "^24.9.0"
+ babel-loader "8.0.6"
+ babel-plugin-named-asset-import "^0.3.6"
+ babel-preset-react-app "^9.1.1"
+ camelcase "^5.3.1"
+ case-sensitive-paths-webpack-plugin "2.3.0"
+ css-loader "3.4.2"
+ dotenv "8.2.0"
+ dotenv-expand "5.1.0"
+ eslint "^6.6.0"
+ eslint-config-react-app "^5.2.0"
+ eslint-loader "3.0.3"
+ eslint-plugin-flowtype "4.6.0"
+ eslint-plugin-import "2.20.0"
+ eslint-plugin-jsx-a11y "6.2.3"
+ eslint-plugin-react "7.18.0"
+ eslint-plugin-react-hooks "^1.6.1"
+ file-loader "4.3.0"
+ fs-extra "^8.1.0"
+ html-webpack-plugin "4.0.0-beta.11"
+ identity-obj-proxy "3.0.0"
+ jest "24.9.0"
+ jest-environment-jsdom-fourteen "1.0.1"
+ jest-resolve "24.9.0"
+ jest-watch-typeahead "0.4.2"
+ mini-css-extract-plugin "0.9.0"
+ optimize-css-assets-webpack-plugin "5.0.3"
+ pnp-webpack-plugin "1.6.0"
+ postcss-flexbugs-fixes "4.1.0"
+ postcss-loader "3.0.0"
+ postcss-normalize "8.0.1"
+ postcss-preset-env "6.7.0"
+ postcss-safe-parser "4.0.1"
+ react-app-polyfill "^1.0.6"
+ react-dev-utils "^10.2.0"
+ resolve "1.15.0"
+ resolve-url-loader "3.1.1"
+ sass-loader "8.0.2"
+ semver "6.3.0"
+ style-loader "0.23.1"
+ terser-webpack-plugin "2.3.4"
+ ts-pnp "1.1.5"
+ url-loader "2.3.0"
+ webpack "4.41.5"
+ webpack-dev-server "3.10.2"
+ webpack-manifest-plugin "2.2.0"
+ workbox-webpack-plugin "4.3.1"
+ optionalDependencies:
+ fsevents "2.1.2"
+
+react-transition-group@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683"
+ integrity sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ dom-helpers "^5.0.1"
+ loose-envify "^1.4.0"
+ prop-types "^15.6.2"
+
+react@^16.12.0:
+ version "16.12.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83"
+ integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg-up@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978"
+ integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==
+ dependencies:
+ find-up "^3.0.0"
+ read-pkg "^3.0.0"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+read-pkg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
+ integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
+ dependencies:
+ load-json-file "^4.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^3.0.0"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@^3.0.6, readable-stream@^3.1.1:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+readdirp@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17"
+ integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==
+ dependencies:
+ picomatch "^2.0.7"
+
+realpath-native@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c"
+ integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==
+ dependencies:
+ util.promisify "^1.0.0"
+
+recursive-readdir@2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f"
+ integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==
+ dependencies:
+ minimatch "3.0.4"
+
+redent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
+ integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
+ dependencies:
+ indent-string "^4.0.0"
+ strip-indent "^3.0.0"
+
+regenerate-unicode-properties@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e"
+ integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==
+ dependencies:
+ regenerate "^1.4.0"
+
+regenerate@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
+ integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
+
+regenerator-runtime@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+ integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3:
+ version "0.13.3"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
+ integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==
+
+regenerator-transform@^0.14.0:
+ version "0.14.1"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb"
+ integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==
+ dependencies:
+ private "^0.1.6"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regex-parser@2.2.10:
+ version "2.2.10"
+ resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.10.tgz#9e66a8f73d89a107616e63b39d4deddfee912b37"
+ integrity sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==
+
+regexp.prototype.flags@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75"
+ integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+regexpp@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
+ integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+
+regexpp@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e"
+ integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==
+
+regexpu-core@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6"
+ integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==
+ dependencies:
+ regenerate "^1.4.0"
+ regenerate-unicode-properties "^8.1.0"
+ regjsgen "^0.5.0"
+ regjsparser "^0.6.0"
+ unicode-match-property-ecmascript "^1.0.4"
+ unicode-match-property-value-ecmascript "^1.1.0"
+
+regjsgen@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c"
+ integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==
+
+regjsparser@^0.6.0:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.3.tgz#74192c5805d35e9f5ebe3c1fb5b40d40a8a38460"
+ integrity sha512-8uZvYbnfAtEm9Ab8NTb3hdLwL4g/LQzEYP7Xs27T96abJCCE2d6r3cPZPQEsLKy0vRSGVNG+/zVGtLr86HQduA==
+ dependencies:
+ jsesc "~0.5.0"
+
+relateurl@^0.2.7:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+ integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+renderkid@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149"
+ integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==
+ dependencies:
+ css-select "^1.1.0"
+ dom-converter "^0.2"
+ htmlparser2 "^3.3.0"
+ strip-ansi "^3.0.0"
+ utila "^0.4.0"
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+request-promise-core@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9"
+ integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==
+ dependencies:
+ lodash "^4.17.15"
+
+request-promise-native@^1.0.5:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36"
+ integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==
+ dependencies:
+ request-promise-core "1.1.3"
+ stealthy-require "^1.1.1"
+ tough-cookie "^2.3.3"
+
+request@^2.87.0, request@^2.88.0:
+ version "2.88.2"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
+ integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.3"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.5.0"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+ integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-url-loader@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz#28931895fa1eab9be0647d3b2958c100ae3c0bf0"
+ integrity sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==
+ dependencies:
+ adjust-sourcemap-loader "2.0.0"
+ camelcase "5.3.1"
+ compose-function "3.0.3"
+ convert-source-map "1.7.0"
+ es6-iterator "2.0.3"
+ loader-utils "1.2.3"
+ postcss "7.0.21"
+ rework "1.0.1"
+ rework-visit "1.0.0"
+ source-map "0.6.1"
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
+
+resolve@1.15.0:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5"
+ integrity sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==
+ dependencies:
+ path-parse "^1.0.6"
+
+resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.3.2, resolve@^1.8.1:
+ version "1.15.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
+ integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
+ dependencies:
+ path-parse "^1.0.6"
+
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+retry@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+ integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
+
+rework-visit@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a"
+ integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo=
+
+rework@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7"
+ integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=
+ dependencies:
+ convert-source-map "^0.3.3"
+ css "^2.0.0"
+
+rgb-regex@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1"
+ integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE=
+
+rgba-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
+ integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=
+
+rimraf@2.6.3:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+rsvp@^4.8.4:
+ version "4.8.5"
+ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
+ integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
+
+run-async@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
+ integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
+ dependencies:
+ is-promise "^2.1.0"
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+ dependencies:
+ aproba "^1.1.1"
+
+rxjs@^6.5.3:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c"
+ integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==
+ dependencies:
+ tslib "^1.9.0"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
+ integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sane@^4.0.3:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded"
+ integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==
+ dependencies:
+ "@cnakazawa/watch" "^1.0.3"
+ anymatch "^2.0.0"
+ capture-exit "^2.0.0"
+ exec-sh "^0.3.2"
+ execa "^1.0.0"
+ fb-watchman "^2.0.0"
+ micromatch "^3.1.4"
+ minimist "^1.1.1"
+ walker "~1.0.5"
+
+sanitize.css@^10.0.0:
+ version "10.0.0"
+ resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-10.0.0.tgz#b5cb2547e96d8629a60947544665243b1dc3657a"
+ integrity sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg==
+
+sass-loader@8.0.2:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d"
+ integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==
+ dependencies:
+ clone-deep "^4.0.1"
+ loader-utils "^1.2.3"
+ neo-async "^2.6.1"
+ schema-utils "^2.6.1"
+ semver "^6.3.0"
+
+sax@^1.2.4, sax@~1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+saxes@^3.1.9:
+ version "3.1.11"
+ resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b"
+ integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==
+ dependencies:
+ xmlchars "^2.1.1"
+
+scheduler@^0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4"
+ integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
+schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6.4:
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.4.tgz#a27efbf6e4e78689d91872ee3ccfa57d7bdd0f53"
+ integrity sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ==
+ dependencies:
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+
+select-hose@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+ integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
+
+selfsigned@^1.10.7:
+ version "1.10.7"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b"
+ integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==
+ dependencies:
+ node-forge "0.9.0"
+
+"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@6.3.0, semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+ integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
+send@0.17.1:
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
+ integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.2"
+ destroy "~1.0.4"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "~1.7.2"
+ mime "1.6.0"
+ ms "2.1.1"
+ on-finished "~2.3.0"
+ range-parser "~1.2.1"
+ statuses "~1.5.0"
+
+serialize-javascript@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61"
+ integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==
+
+serve-index@^1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
+ integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=
+ dependencies:
+ accepts "~1.3.4"
+ batch "0.6.1"
+ debug "2.6.9"
+ escape-html "~1.0.3"
+ http-errors "~1.6.2"
+ mime-types "~2.1.17"
+ parseurl "~1.3.2"
+
+serve-static@1.14.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
+ integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "0.17.1"
+
+set-blocking@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+setprototypeof@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+ integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+
+setprototypeof@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+ integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shallow-clone@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060"
+ integrity sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=
+ dependencies:
+ is-extendable "^0.1.1"
+ kind-of "^2.0.1"
+ lazy-cache "^0.2.3"
+ mixin-object "^2.0.1"
+
+shallow-clone@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
+ integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
+ dependencies:
+ kind-of "^6.0.2"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shell-quote@1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2"
+ integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==
+
+shellwords@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+ integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+simple-swizzle@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+ integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=
+ dependencies:
+ is-arrayish "^0.3.1"
+
+sisteransi@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3"
+ integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+slash@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+ integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slice-ansi@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+ integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+ dependencies:
+ ansi-styles "^3.2.0"
+ astral-regex "^1.0.0"
+ is-fullwidth-code-point "^2.0.0"
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+sockjs-client@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5"
+ integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==
+ dependencies:
+ debug "^3.2.5"
+ eventsource "^1.0.7"
+ faye-websocket "~0.11.1"
+ inherits "^2.0.3"
+ json3 "^3.3.2"
+ url-parse "^1.4.3"
+
+sockjs@0.3.19:
+ version "0.3.19"
+ resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d"
+ integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==
+ dependencies:
+ faye-websocket "^0.10.0"
+ uuid "^3.0.1"
+
+sort-keys@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+ integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0=
+ dependencies:
+ is-plain-obj "^1.0.0"
+
+source-list-map@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+ dependencies:
+ atob "^2.1.2"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.5.6, source-map-support@~0.5.12:
+ version "0.5.16"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
+ integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@^0.5.0, source-map@^0.5.6:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+spdx-correct@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
+ integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
+ integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+ integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
+ integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
+
+spdy-transport@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
+ integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
+ dependencies:
+ debug "^4.1.0"
+ detect-node "^2.0.4"
+ hpack.js "^2.1.6"
+ obuf "^1.1.2"
+ readable-stream "^3.0.6"
+ wbuf "^1.7.3"
+
+spdy@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2"
+ integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==
+ dependencies:
+ debug "^4.1.0"
+ handle-thing "^2.0.0"
+ http-deceiver "^1.2.7"
+ select-hose "^2.0.0"
+ spdy-transport "^3.0.0"
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+sshpk@^1.7.0:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+ssri@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
+ integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
+ dependencies:
+ figgy-pudding "^3.5.1"
+
+ssri@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d"
+ integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==
+ dependencies:
+ figgy-pudding "^3.5.1"
+ minipass "^3.1.1"
+
+stable@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+ integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+
+stack-utils@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
+ integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+stealthy-require@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+ integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
+
+stream-browserify@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+
+strict-uri-encode@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+ integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
+
+string-length@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
+ integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=
+ dependencies:
+ astral-regex "^1.0.0"
+ strip-ansi "^4.0.0"
+
+string-length@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837"
+ integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==
+ dependencies:
+ astral-regex "^1.0.0"
+ strip-ansi "^5.2.0"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string-width@^2.0.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^3.0.0, string-width@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ dependencies:
+ emoji-regex "^7.0.1"
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^5.1.0"
+
+string-width@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
+ integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.0"
+
+string.prototype.trimleft@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74"
+ integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==
+ dependencies:
+ define-properties "^1.1.3"
+ function-bind "^1.1.1"
+
+string.prototype.trimright@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9"
+ integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==
+ dependencies:
+ define-properties "^1.1.3"
+ function-bind "^1.1.1"
+
+string_decoder@^1.0.0, string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+stringify-object@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+ integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+ dependencies:
+ get-own-enumerable-property-symbols "^3.0.0"
+ is-obj "^1.0.1"
+ is-regexp "^1.0.0"
+
+strip-ansi@6.0.0, strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.0.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-comments@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d"
+ integrity sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==
+ dependencies:
+ babel-extract-comments "^1.0.0"
+ babel-plugin-transform-object-rest-spread "^6.26.0"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-indent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
+ integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
+ dependencies:
+ min-indent "^1.0.0"
+
+strip-json-comments@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
+ integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
+
+style-loader@0.23.1:
+ version "0.23.1"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925"
+ integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==
+ dependencies:
+ loader-utils "^1.1.0"
+ schema-utils "^1.0.0"
+
+stylehacks@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
+ integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==
+ dependencies:
+ browserslist "^4.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
+ integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==
+ dependencies:
+ has-flag "^4.0.0"
+
+svg-parser@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.3.tgz#a38f2e4e5442986f7ecb554c11f1411cfcf8c2b9"
+ integrity sha512-fnCWiifNhK8i2Z7b9R5tbNahpxrRdAaQbnoxKlT2KrSCj9Kq/yBSgulCRgBJRhy1dPnSY5slg5ehPUnzpEcHlg==
+
+svgo@^1.0.0, svgo@^1.2.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
+ integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==
+ dependencies:
+ chalk "^2.4.1"
+ coa "^2.0.2"
+ css-select "^2.0.0"
+ css-select-base-adapter "^0.1.1"
+ css-tree "1.0.0-alpha.37"
+ csso "^4.0.2"
+ js-yaml "^3.13.1"
+ mkdirp "~0.5.1"
+ object.values "^1.1.0"
+ sax "~1.2.4"
+ stable "^0.1.8"
+ unquote "~1.1.1"
+ util.promisify "~1.0.0"
+
+symbol-tree@^3.2.2:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
+table@^5.2.3:
+ version "5.4.6"
+ resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
+ integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+ dependencies:
+ ajv "^6.10.2"
+ lodash "^4.17.14"
+ slice-ansi "^2.1.0"
+ string-width "^3.0.0"
+
+tapable@^1.0.0, tapable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+terser-webpack-plugin@2.3.4:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.4.tgz#ac045703bd8da0936ce910d8fb6350d0e1dee5fe"
+ integrity sha512-Nv96Nws2R2nrFOpbzF6IxRDpIkkIfmhvOws+IqMvYdFLO7o6wAILWFKONFgaYy8+T4LVz77DQW0f7wOeDEAjrg==
+ dependencies:
+ cacache "^13.0.1"
+ find-cache-dir "^3.2.0"
+ jest-worker "^25.1.0"
+ p-limit "^2.2.2"
+ schema-utils "^2.6.4"
+ serialize-javascript "^2.1.2"
+ source-map "^0.6.1"
+ terser "^4.4.3"
+ webpack-sources "^1.4.3"
+
+terser-webpack-plugin@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c"
+ integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==
+ dependencies:
+ cacache "^12.0.2"
+ find-cache-dir "^2.1.0"
+ is-wsl "^1.1.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^2.1.2"
+ source-map "^0.6.1"
+ terser "^4.1.2"
+ webpack-sources "^1.4.0"
+ worker-farm "^1.7.0"
+
+terser@^4.1.2, terser@^4.3.9, terser@^4.4.3:
+ version "4.6.3"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.3.tgz#e33aa42461ced5238d352d2df2a67f21921f8d87"
+ integrity sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.12"
+
+test-exclude@^5.2.3:
+ version "5.2.3"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0"
+ integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==
+ dependencies:
+ glob "^7.1.3"
+ minimatch "^3.0.4"
+ read-pkg-up "^4.0.0"
+ require-main-filename "^2.0.0"
+
+text-table@0.2.0, text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+throat@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
+ integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
+
+through2@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through@^2.3.6:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+thunky@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
+ integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+
+timers-browserify@^2.0.4:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f"
+ integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==
+ dependencies:
+ setimmediate "^1.0.4"
+
+timsort@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
+ integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
+
+tiny-warning@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
+ integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
+
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+tmpl@1.0.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+ integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+toidentifier@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+ integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
+tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.5.0, tough-cookie@~2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
+tr46@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+ integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
+ dependencies:
+ punycode "^2.1.0"
+
+ts-pnp@1.1.5, ts-pnp@^1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.5.tgz#840e0739c89fce5f3abd9037bb091dbff16d9dec"
+ integrity sha512-ti7OGMOUOzo66wLF3liskw6YQIaSsBgc4GOAlWRnIEj8htCxJUxskanMUoJOD6MDCRAXo36goXJZch+nOS0VMA==
+
+tslib@^1.8.1, tslib@^1.9.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
+ integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
+
+tsutils@^3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
+ integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==
+ dependencies:
+ tslib "^1.8.1"
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
+type-is@~1.6.17, type-is@~1.6.18:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
+
+type@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
+ integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
+
+type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3"
+ integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+unicode-canonical-property-names-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
+ integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
+
+unicode-match-property-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
+ integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^1.0.4"
+ unicode-property-aliases-ecmascript "^1.0.4"
+
+unicode-match-property-value-ecmascript@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277"
+ integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==
+
+unicode-property-aliases-ecmascript@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57"
+ integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+uniq@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+ integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
+
+uniqs@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+ integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI=
+
+unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+ dependencies:
+ imurmurhash "^0.1.4"
+
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+unquote@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
+ integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+upath@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
+upper-case@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+ integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=
+
+uri-js@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url-loader@2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b"
+ integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==
+ dependencies:
+ loader-utils "^1.2.3"
+ mime "^2.4.4"
+ schema-utils "^2.5.0"
+
+url-parse@^1.4.3:
+ version "1.4.7"
+ resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
+ integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==
+ dependencies:
+ querystringify "^2.1.1"
+ requires-port "^1.0.0"
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util.promisify@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
+ integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
+ dependencies:
+ define-properties "^1.1.2"
+ object.getownpropertydescriptors "^2.0.3"
+
+util.promisify@^1.0.0, util.promisify@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee"
+ integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.2"
+ has-symbols "^1.0.1"
+ object.getownpropertydescriptors "^2.1.0"
+
+util@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
+utila@^0.4.0, utila@~0.4:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+ integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+ integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
+
+uuid@^3.0.1, uuid@^3.3.2:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+ integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+
+v8-compile-cache@^2.0.3:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e"
+ integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+
+vendors@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e"
+ integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vm-browserify@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+ integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+
+w3c-hr-time@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045"
+ integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=
+ dependencies:
+ browser-process-hrtime "^0.1.2"
+
+w3c-xmlserializer@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794"
+ integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==
+ dependencies:
+ domexception "^1.0.1"
+ webidl-conversions "^4.0.2"
+ xml-name-validator "^3.0.0"
+
+wait-for-expect@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-3.0.2.tgz#d2f14b2f7b778c9b82144109c8fa89ceaadaa463"
+ integrity sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==
+
+walker@^1.0.7, walker@~1.0.5:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=
+ dependencies:
+ makeerror "1.0.x"
+
+watchpack@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
+ integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==
+ dependencies:
+ chokidar "^2.0.2"
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+
+wbuf@^1.1.0, wbuf@^1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
+ integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
+ dependencies:
+ minimalistic-assert "^1.0.0"
+
+webidl-conversions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+ integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+
+webpack-dev-middleware@^3.7.2:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3"
+ integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==
+ dependencies:
+ memory-fs "^0.4.1"
+ mime "^2.4.4"
+ mkdirp "^0.5.1"
+ range-parser "^1.2.1"
+ webpack-log "^2.0.0"
+
+webpack-dev-server@3.10.2:
+ version "3.10.2"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.2.tgz#3403287d674c7407aab6d9b3f72259ecd0aa0874"
+ integrity sha512-pxZKPYb+n77UN8u9YxXT4IaIrGcNtijh/mi8TXbErHmczw0DtPnMTTjHj+eNjkqLOaAZM/qD7V59j/qJsEiaZA==
+ dependencies:
+ ansi-html "0.0.7"
+ bonjour "^3.5.0"
+ chokidar "^2.1.8"
+ compression "^1.7.4"
+ connect-history-api-fallback "^1.6.0"
+ debug "^4.1.1"
+ del "^4.1.1"
+ express "^4.17.1"
+ html-entities "^1.2.1"
+ http-proxy-middleware "0.19.1"
+ import-local "^2.0.0"
+ internal-ip "^4.3.0"
+ ip "^1.1.5"
+ is-absolute-url "^3.0.3"
+ killable "^1.0.1"
+ loglevel "^1.6.6"
+ opn "^5.5.0"
+ p-retry "^3.0.1"
+ portfinder "^1.0.25"
+ schema-utils "^1.0.0"
+ selfsigned "^1.10.7"
+ semver "^6.3.0"
+ serve-index "^1.9.1"
+ sockjs "0.3.19"
+ sockjs-client "1.4.0"
+ spdy "^4.0.1"
+ strip-ansi "^3.0.1"
+ supports-color "^6.1.0"
+ url "^0.11.0"
+ webpack-dev-middleware "^3.7.2"
+ webpack-log "^2.0.0"
+ ws "^6.2.1"
+ yargs "12.0.5"
+
+webpack-log@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f"
+ integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==
+ dependencies:
+ ansi-colors "^3.0.0"
+ uuid "^3.3.2"
+
+webpack-manifest-plugin@2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz#19ca69b435b0baec7e29fbe90fb4015de2de4f16"
+ integrity sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==
+ dependencies:
+ fs-extra "^7.0.0"
+ lodash ">=3.5 <5"
+ object.entries "^1.1.0"
+ tapable "^1.0.0"
+
+webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack@4.41.5:
+ version "4.41.5"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.5.tgz#3210f1886bce5310e62bb97204d18c263341b77c"
+ integrity sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-module-context" "1.8.5"
+ "@webassemblyjs/wasm-edit" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+ acorn "^6.2.1"
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^4.1.0"
+ eslint-scope "^4.0.3"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.4.0"
+ loader-utils "^1.2.3"
+ memory-fs "^0.4.1"
+ micromatch "^3.1.10"
+ mkdirp "^0.5.1"
+ neo-async "^2.6.1"
+ node-libs-browser "^2.2.1"
+ schema-utils "^1.0.0"
+ tapable "^1.1.3"
+ terser-webpack-plugin "^1.4.3"
+ watchpack "^1.6.0"
+ webpack-sources "^1.4.1"
+
+websocket-driver@>=0.5.1:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9"
+ integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==
+ dependencies:
+ http-parser-js ">=0.4.0 <0.4.11"
+ safe-buffer ">=5.1.0"
+ websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
+ integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==
+
+whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+ integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+ dependencies:
+ iconv-lite "0.4.24"
+
+whatwg-fetch@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
+ integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
+
+whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+ integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+
+whatwg-url@^6.4.1:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
+ integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+whatwg-url@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
+ integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@^1.2.9, which@^1.3.0, which@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+word-wrap@~1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+workbox-background-sync@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz#26821b9bf16e9e37fd1d640289edddc08afd1950"
+ integrity sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-broadcast-update@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz#e2c0280b149e3a504983b757606ad041f332c35b"
+ integrity sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-build@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-4.3.1.tgz#414f70fb4d6de47f6538608b80ec52412d233e64"
+ integrity sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==
+ dependencies:
+ "@babel/runtime" "^7.3.4"
+ "@hapi/joi" "^15.0.0"
+ common-tags "^1.8.0"
+ fs-extra "^4.0.2"
+ glob "^7.1.3"
+ lodash.template "^4.4.0"
+ pretty-bytes "^5.1.0"
+ stringify-object "^3.3.0"
+ strip-comments "^1.0.2"
+ workbox-background-sync "^4.3.1"
+ workbox-broadcast-update "^4.3.1"
+ workbox-cacheable-response "^4.3.1"
+ workbox-core "^4.3.1"
+ workbox-expiration "^4.3.1"
+ workbox-google-analytics "^4.3.1"
+ workbox-navigation-preload "^4.3.1"
+ workbox-precaching "^4.3.1"
+ workbox-range-requests "^4.3.1"
+ workbox-routing "^4.3.1"
+ workbox-strategies "^4.3.1"
+ workbox-streams "^4.3.1"
+ workbox-sw "^4.3.1"
+ workbox-window "^4.3.1"
+
+workbox-cacheable-response@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz#f53e079179c095a3f19e5313b284975c91428c91"
+ integrity sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-core@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-4.3.1.tgz#005d2c6a06a171437afd6ca2904a5727ecd73be6"
+ integrity sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==
+
+workbox-expiration@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-4.3.1.tgz#d790433562029e56837f341d7f553c4a78ebe921"
+ integrity sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-google-analytics@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz#9eda0183b103890b5c256e6f4ea15a1f1548519a"
+ integrity sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==
+ dependencies:
+ workbox-background-sync "^4.3.1"
+ workbox-core "^4.3.1"
+ workbox-routing "^4.3.1"
+ workbox-strategies "^4.3.1"
+
+workbox-navigation-preload@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz#29c8e4db5843803b34cd96dc155f9ebd9afa453d"
+ integrity sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-precaching@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-4.3.1.tgz#9fc45ed122d94bbe1f0ea9584ff5940960771cba"
+ integrity sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-range-requests@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz#f8a470188922145cbf0c09a9a2d5e35645244e74"
+ integrity sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-routing@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-4.3.1.tgz#a675841af623e0bb0c67ce4ed8e724ac0bed0cda"
+ integrity sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-strategies@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-4.3.1.tgz#d2be03c4ef214c115e1ab29c9c759c9fe3e9e646"
+ integrity sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-streams@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-4.3.1.tgz#0b57da70e982572de09c8742dd0cb40a6b7c2cc3"
+ integrity sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-sw@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-4.3.1.tgz#df69e395c479ef4d14499372bcd84c0f5e246164"
+ integrity sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==
+
+workbox-webpack-plugin@4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz#47ff5ea1cc074b6c40fb5a86108863a24120d4bd"
+ integrity sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
+ json-stable-stringify "^1.0.1"
+ workbox-build "^4.3.1"
+
+workbox-window@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-4.3.1.tgz#ee6051bf10f06afa5483c9b8dfa0531994ede0f3"
+ integrity sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==
+ dependencies:
+ workbox-core "^4.3.1"
+
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+ dependencies:
+ errno "~0.1.7"
+
+worker-rpc@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5"
+ integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==
+ dependencies:
+ microevent.ts "~0.1.1"
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrap-ansi@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+ dependencies:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529"
+ integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+write@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+ integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+ dependencies:
+ mkdirp "^0.5.1"
+
+ws@^5.2.0:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
+ integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+ws@^6.1.2, ws@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
+ integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+xml-name-validator@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
+xmlchars@^2.1.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+ integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
+xtend@^4.0.0, xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+ integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yaml@^1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2"
+ integrity sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==
+ dependencies:
+ "@babel/runtime" "^7.6.3"
+
+yargs-parser@^11.1.1:
+ version "11.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
+ integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^13.1.1:
+ version "13.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
+ integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs@12.0.5:
+ version "12.0.5"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
+ integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
+ dependencies:
+ cliui "^4.0.0"
+ decamelize "^1.2.0"
+ find-up "^3.0.0"
+ get-caller-file "^1.0.1"
+ os-locale "^3.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1 || ^4.0.0"
+ yargs-parser "^11.1.1"
+
+yargs@^13.3.0:
+ version "13.3.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83"
+ integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.1"
From 32aebbc23fe3aeeeccadfd2054fa5c6aed569d97 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Wed, 26 Feb 2020 20:55:20 -0500
Subject: [PATCH 10/66] added application for testing
---
dummyReactApp/app/src/backend.py | 18 +++++++++
setup.py | 2 +-
zpages/test_application/backend.py | 51 ++++++++++++++++++++++++
zpages/test_application/mock_frontend.py | 21 ++++++++++
4 files changed, 91 insertions(+), 1 deletion(-)
create mode 100644 zpages/test_application/backend.py
create mode 100644 zpages/test_application/mock_frontend.py
diff --git a/dummyReactApp/app/src/backend.py b/dummyReactApp/app/src/backend.py
index 978e7d454..e204be699 100644
--- a/dummyReactApp/app/src/backend.py
+++ b/dummyReactApp/app/src/backend.py
@@ -1,5 +1,16 @@
from flask import Flask, escape, request, render_template, jsonify
from flask_cors import CORS
+from opencensus.trace.tracer import Tracer
+from opencensus.trace.samplers import AlwaysOnSampler
+from opencensus.stats import stats as stats_module
+
+tracer = Tracer(sampler=AlwaysOnSampler())
+
+stats = stats_module.stats
+view_manager = stats.view_manager
+stats_recorder = stats.stats_recorder
+
+
app = Flask(__name__)
CORS(app)
@@ -27,6 +38,13 @@ def getData3():
test_data = {'name': name}
return test_data
+# Example for creating nested spans taken from opencensus-python wiki/documentation
+with tracer.span(name='span1'):
+ getData1()
+with tracer.span(name='span2'):
+ getData2()
+with tracer.span(name='span2'):
+ getData3()
if __name__ == '__main__':
app.run(debug=True)
\ No newline at end of file
diff --git a/setup.py b/setup.py
index c060e343d..2f07bc013 100644
--- a/setup.py
+++ b/setup.py
@@ -41,7 +41,7 @@
long_description=open('README.rst').read(),
install_requires=[
'opencensus-context == 0.2.dev0',
- 'google-api-core >= 1.0.0, < 2.0.0',
+ 'google-api-core >= 1.0.0, < 2.0.0', 'requests'
],
extras_require={},
license='Apache-2.0',
diff --git a/zpages/test_application/backend.py b/zpages/test_application/backend.py
new file mode 100644
index 000000000..a43fe443a
--- /dev/null
+++ b/zpages/test_application/backend.py
@@ -0,0 +1,51 @@
+from flask import Flask, escape, request, render_template, jsonify
+from flask_cors import CORS
+from opencensus.trace.tracer import Tracer
+from opencensus.trace.samplers import AlwaysOnSampler
+from opencensus.stats import stats as stats_module
+
+tracer = Tracer(sampler=AlwaysOnSampler())
+
+stats = stats_module.stats
+view_manager = stats.view_manager
+stats_recorder = stats.stats_recorder
+
+
+
+app = Flask(__name__)
+CORS(app)
+
+@app.route('/')
+def hello():
+ names = {'name1': "Anam", 'name2': "Gaven", "name3": "Aasiyah"}
+ return render_template("index.html", names=names)
+
+@app.route('/getmethod1', methods=['GET'])
+def getData1():
+ name = "Anam Navied"
+ test_data = {'name': name}
+ return test_data
+
+@app.route('/getmethod2', methods=['GET'])
+def getData2():
+ name = "Gaven Kerr"
+ test_data = {'name': name}
+ return test_data
+
+@app.route('/getmethod3', methods=['GET'])
+def getData3():
+ name = "Aasiyah Feisal"
+ test_data = {'name': name}
+ return test_data
+
+# Example for creating nested spans taken from opencensus-python wiki/documentation
+# with tracer.span(name='span1'):
+# getData1()
+# with tracer.span(name='span2'):
+# getData2()
+# with tracer.span(name='span2'):
+# getData3()
+
+
+if __name__ == '__main__':
+ app.run(host='0.0.0.0', port=8000, debug=True)
\ No newline at end of file
diff --git a/zpages/test_application/mock_frontend.py b/zpages/test_application/mock_frontend.py
new file mode 100644
index 000000000..d539a7714
--- /dev/null
+++ b/zpages/test_application/mock_frontend.py
@@ -0,0 +1,21 @@
+import requests
+from opencensus.trace.tracer import Tracer
+from opencensus.trace.samplers import AlwaysOnSampler
+from opencensus.stats import stats as stats_module
+
+tracer = Tracer(sampler=AlwaysOnSampler())
+
+stats = stats_module.stats
+view_manager = stats.view_manager
+stats_recorder = stats.stats_recorder
+
+with tracer.span(name='span1'):
+ r1 = requests.get('http://localhost:8000/getmethod1')
+ print("Call to method 1: ", r1.status_code, ", " + r1.text)
+with tracer.span(name='span2'):
+ r2 = requests.get('http://localhost:8000/getmethod2')
+ print("Call to method 2: ", r2.status_code, ", " + r2.text)
+with tracer.span(name='span3'):
+ r3 = requests.get('http://localhost:8000/getmethod3')
+ print("Call to method 3: ", r3.status_code, ", " + r3.text)
+ print(r3.json()['name'])
From c75f88c06ebf6698991aa3d96ac471a047e0df8b Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Fri, 28 Feb 2020 16:45:07 -0500
Subject: [PATCH 11/66] added code as of sponsor meeting feb 28
---
zpages/rpc.py | 43 +++++++-----
zpages/test_application/backend.py | 29 +++-----
zpages/test_application/mock_frontend.py | 86 +++++++++++++++++++-----
3 files changed, 106 insertions(+), 52 deletions(-)
diff --git a/zpages/rpc.py b/zpages/rpc.py
index 67c42e5f8..1b259a8bc 100644
--- a/zpages/rpc.py
+++ b/zpages/rpc.py
@@ -12,7 +12,7 @@
print(sys.path)
-class statSnapshot(NamedTuple):
+class stat_snapshot(NamedTuple):
method: str
received: bool
countMinute: int
@@ -35,36 +35,43 @@ class statSnapshot(NamedTuple):
errorsTotal: int
-class statGroup(NamedTuple):
+class stat_group(NamedTuple):
direction: str
snapshots: list # of type statSnapshot, can't specify explicitly but will only consist of this
-class statPage(NamedTuple):
+class stat_page(NamedTuple):
statgroups: list # of type statGroup, can't specify explicitly but will only consist of this
-def getStatsSnapshots(map, views) :
+
+def get_stats_snapshots(map, views):
for view in views :
- view_data = manager.get_view(manager,view.name)
- if view_data is None:
- continue
- for key in view_data.tag_value_aggregation_data_map(view_data).keys():
- method = "" if key is None else key.asString()
- snapshot = statSnapshot(map.get(method))
- if (snapshot is None) :
- snapshot = statSnapshot()
- map.put(method, snapshot)
+ view_data = manager.get_view(manager,view.name)
+ if view_data is None:
+ continue
+ for entry in view_data.tag_value_aggregation_data_map():
+ tag_values = entry # Entry, AggregationData> entry
+ # if len(tag_values):
+ #
+ #
+ # old
+ # for key in view_data.tag_value_aggregation_data_map(view_data).keys():
+ # method = "" if key is None else key.asString()
+ # snapshot = stat_snapshot(map.get(method))
+ # if (snapshot is None) :
+ # snapshot = stat_snapshot()
+ # map.put(method, snapshot)
#TODO getStats(snapshot, entry.getValue(), view, view_data.getWindowData());
@app.route('/')
-def showPage():
- directionDummy = "Sent"
- test_row = statSnapshot('apicall1()', False, 1, 2, 3, '2020-02-18 23:46:31.243168', '2020-02-18 23:46:31.243168', '2020-02-18 23:46:31.243168', 1.1, 1.2, 1.3, 2.1, 2.2, 2.3, 3.1, 3.2, 3.3, 4, 5, 6)
+def show_page():
+ direction_dummy = "Sent"
+ test_row = stat_snapshot('apicall1()', False, 1, 2, 3, '2020-02-18 23:46:31.243168', '2020-02-18 23:46:31.243168', '2020-02-18 23:46:31.243168', 1.1, 1.2, 1.3, 2.1, 2.2, 2.3, 3.1, 3.2, 3.3, 4, 5, 6)
- return render_template("index.html", Direction=directionDummy,
+ return render_template("index.html", Direction=direction_dummy,
method=test_row.method,
countMinute=test_row.countMinute,
countHour=test_row.countHour,
@@ -86,4 +93,4 @@ def showPage():
errorsTotal=test_row.errorsTotal)
if __name__ == '__main__':
- app.run(debug=True)
+ app.run(debug=True)
\ No newline at end of file
diff --git a/zpages/test_application/backend.py b/zpages/test_application/backend.py
index a43fe443a..d2fbc709c 100644
--- a/zpages/test_application/backend.py
+++ b/zpages/test_application/backend.py
@@ -1,16 +1,15 @@
from flask import Flask, escape, request, render_template, jsonify
from flask_cors import CORS
-from opencensus.trace.tracer import Tracer
-from opencensus.trace.samplers import AlwaysOnSampler
-from opencensus.stats import stats as stats_module
-
-tracer = Tracer(sampler=AlwaysOnSampler())
-
-stats = stats_module.stats
-view_manager = stats.view_manager
-stats_recorder = stats.stats_recorder
-
-
+# from opencensus.trace.tracer import Tracer
+# from opencensus.trace.samplers import AlwaysOnSampler
+# from opencensus.stats import stats as stats_module
+#
+# # determines that all traces will be sampled (instead of a percentage of all requests)
+# tracer = Tracer(sampler=AlwaysOnSampler())
+#
+# stats = stats_module.stats
+# view_manager = stats.view_manager
+# stats_recorder = stats.stats_recorder
app = Flask(__name__)
CORS(app)
@@ -38,14 +37,6 @@ def getData3():
test_data = {'name': name}
return test_data
-# Example for creating nested spans taken from opencensus-python wiki/documentation
-# with tracer.span(name='span1'):
-# getData1()
-# with tracer.span(name='span2'):
-# getData2()
-# with tracer.span(name='span2'):
-# getData3()
-
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000, debug=True)
\ No newline at end of file
diff --git a/zpages/test_application/mock_frontend.py b/zpages/test_application/mock_frontend.py
index d539a7714..52c1a2bc8 100644
--- a/zpages/test_application/mock_frontend.py
+++ b/zpages/test_application/mock_frontend.py
@@ -1,21 +1,77 @@
+# Copyright 2018, OpenCensus Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import random
+import time
import requests
-from opencensus.trace.tracer import Tracer
+from pprint import pprint
+
from opencensus.trace.samplers import AlwaysOnSampler
+from opencensus.trace.tracer import Tracer
+from opencensus.stats import aggregation as aggregation_module
+from opencensus.stats import measure as measure_module
from opencensus.stats import stats as stats_module
+from opencensus.stats import view as view_module
+from opencensus.tags import tag_key as tag_key_module
+from opencensus.tags import tag_map as tag_map_module
+from opencensus.tags import tag_value as tag_value_module
+
+MiB = 1 << 20
+FRONTEND_KEY = tag_key_module.TagKey("my.org/keys/frontend")
+VIDEO_SIZE_MEASURE = measure_module.MeasureInt(
+ "my.org/measures/video_size", "size of processed videos", "By")
+VIDEO_SIZE_VIEW_NAME = "my.org/views/video_size"
+VIDEO_SIZE_DISTRIBUTION = aggregation_module.DistributionAggregation(
+ [0.0, 16.0 * MiB, 256.0 * MiB])
+VIDEO_SIZE_VIEW = view_module.View(
+ VIDEO_SIZE_VIEW_NAME, "processed video size over time", [FRONTEND_KEY],
+ VIDEO_SIZE_MEASURE, VIDEO_SIZE_DISTRIBUTION)
tracer = Tracer(sampler=AlwaysOnSampler())
-stats = stats_module.stats
-view_manager = stats.view_manager
-stats_recorder = stats.stats_recorder
-
-with tracer.span(name='span1'):
- r1 = requests.get('http://localhost:8000/getmethod1')
- print("Call to method 1: ", r1.status_code, ", " + r1.text)
-with tracer.span(name='span2'):
- r2 = requests.get('http://localhost:8000/getmethod2')
- print("Call to method 2: ", r2.status_code, ", " + r2.text)
-with tracer.span(name='span3'):
- r3 = requests.get('http://localhost:8000/getmethod3')
- print("Call to method 3: ", r3.status_code, ", " + r3.text)
- print(r3.json()['name'])
+
+def main():
+ stats = stats_module.stats
+ view_manager = stats.view_manager
+ stats_recorder = stats.stats_recorder
+
+ # Register view.
+ view_manager.register_view(VIDEO_SIZE_VIEW)
+
+ # Sleep for [0, 10] milliseconds to fake work.
+ time.sleep(random.randint(1, 10) / 1000.0)
+
+ # Process video.
+ with tracer.span(name='span1'):
+ r1 = requests.get('http://localhost:8000/getmethod1')
+ print("Call to method 1: ", r1.text)
+
+ # Record the processed video size.
+ tag_value = tag_value_module.TagValue("mobile-ios9.3.5")
+ tag_map = tag_map_module.TagMap()
+ tag_map.insert(FRONTEND_KEY, tag_value)
+ measure_map = stats_recorder.new_measurement_map()
+ measure_map.measure_int_put(VIDEO_SIZE_MEASURE, 25 * MiB)
+ measure_map.record(tag_map)
+
+ # Get aggregated stats and print it to console.
+ view_data = view_manager.get_view(VIDEO_SIZE_VIEW_NAME)
+ pprint(vars(view_data))
+ for k, v in view_data._tag_value_aggregation_data_map.items():
+ pprint(k)
+ pprint(vars(v))
+
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file
From b16e0572a591eaf7de123a163299c88e76d9e99c Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Sat, 29 Feb 2020 16:08:20 -0500
Subject: [PATCH 12/66] simplified dummy app, resolces #7
---
zpages/test_application/backend.py | 42 ------------------------
zpages/test_application/mock_frontend.py | 23 +++++++++++--
2 files changed, 21 insertions(+), 44 deletions(-)
delete mode 100644 zpages/test_application/backend.py
diff --git a/zpages/test_application/backend.py b/zpages/test_application/backend.py
deleted file mode 100644
index d2fbc709c..000000000
--- a/zpages/test_application/backend.py
+++ /dev/null
@@ -1,42 +0,0 @@
-from flask import Flask, escape, request, render_template, jsonify
-from flask_cors import CORS
-# from opencensus.trace.tracer import Tracer
-# from opencensus.trace.samplers import AlwaysOnSampler
-# from opencensus.stats import stats as stats_module
-#
-# # determines that all traces will be sampled (instead of a percentage of all requests)
-# tracer = Tracer(sampler=AlwaysOnSampler())
-#
-# stats = stats_module.stats
-# view_manager = stats.view_manager
-# stats_recorder = stats.stats_recorder
-
-app = Flask(__name__)
-CORS(app)
-
-@app.route('/')
-def hello():
- names = {'name1': "Anam", 'name2': "Gaven", "name3": "Aasiyah"}
- return render_template("index.html", names=names)
-
-@app.route('/getmethod1', methods=['GET'])
-def getData1():
- name = "Anam Navied"
- test_data = {'name': name}
- return test_data
-
-@app.route('/getmethod2', methods=['GET'])
-def getData2():
- name = "Gaven Kerr"
- test_data = {'name': name}
- return test_data
-
-@app.route('/getmethod3', methods=['GET'])
-def getData3():
- name = "Aasiyah Feisal"
- test_data = {'name': name}
- return test_data
-
-
-if __name__ == '__main__':
- app.run(host='0.0.0.0', port=8000, debug=True)
\ No newline at end of file
diff --git a/zpages/test_application/mock_frontend.py b/zpages/test_application/mock_frontend.py
index 52c1a2bc8..46e501d4a 100644
--- a/zpages/test_application/mock_frontend.py
+++ b/zpages/test_application/mock_frontend.py
@@ -40,6 +40,21 @@
tracer = Tracer(sampler=AlwaysOnSampler())
+def getData1():
+ name = "Anam Navied"
+ test_data = {'name': name}
+ return test_data
+
+def getData2():
+ name = "Gaven Kerr"
+ test_data = {'name': name}
+ return test_data
+
+def getData3():
+ name = "Aasiyah Feisal"
+ test_data = {'name': name}
+ return test_data
+
def main():
stats = stats_module.stats
@@ -54,8 +69,12 @@ def main():
# Process video.
with tracer.span(name='span1'):
- r1 = requests.get('http://localhost:8000/getmethod1')
- print("Call to method 1: ", r1.text)
+ getData1()
+ with tracer.span(name='span2'):
+ getData2()
+ with tracer.span(name='span3'):
+ getData3()
+
# Record the processed video size.
tag_value = tag_value_module.TagValue("mobile-ios9.3.5")
From 54b93f12e5b5429a4bc452f2689e596ab20bd2d2 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Sat, 29 Feb 2020 17:05:50 -0500
Subject: [PATCH 13/66] fixed pylint errors, 1 warning remaining
---
.../{mock_frontend.py => app.py} | 50 +++++++++++++------
1 file changed, 35 insertions(+), 15 deletions(-)
rename zpages/test_application/{mock_frontend.py => app.py} (75%)
diff --git a/zpages/test_application/mock_frontend.py b/zpages/test_application/app.py
similarity index 75%
rename from zpages/test_application/mock_frontend.py
rename to zpages/test_application/app.py
index 46e501d4a..ceb93d36d 100644
--- a/zpages/test_application/mock_frontend.py
+++ b/zpages/test_application/app.py
@@ -12,9 +12,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+"""
+app.py is a test Python application script that calls 3 methods, each of which
+are wrapped around a Tracer.span object that traces that call/request and represents
+that data within a span.
+"""
+
import random
import time
-import requests
from pprint import pprint
from opencensus.trace.samplers import AlwaysOnSampler
@@ -27,39 +32,55 @@
from opencensus.tags import tag_map as tag_map_module
from opencensus.tags import tag_value as tag_value_module
-MiB = 1 << 20
+MIB = 1 << 20
FRONTEND_KEY = tag_key_module.TagKey("my.org/keys/frontend")
VIDEO_SIZE_MEASURE = measure_module.MeasureInt(
"my.org/measures/video_size", "size of processed videos", "By")
VIDEO_SIZE_VIEW_NAME = "my.org/views/video_size"
VIDEO_SIZE_DISTRIBUTION = aggregation_module.DistributionAggregation(
- [0.0, 16.0 * MiB, 256.0 * MiB])
+ [0.0, 16.0 * MIB, 256.0 * MIB])
VIDEO_SIZE_VIEW = view_module.View(
VIDEO_SIZE_VIEW_NAME, "processed video size over time", [FRONTEND_KEY],
VIDEO_SIZE_MEASURE, VIDEO_SIZE_DISTRIBUTION)
-tracer = Tracer(sampler=AlwaysOnSampler())
-def getData1():
+def get_data1():
+ """
+ Return a dictionary object with name #1
+ """
name = "Anam Navied"
test_data = {'name': name}
return test_data
-def getData2():
+
+def get_data2():
+ """
+ Return a dictionary object with name #2
+ """
name = "Gaven Kerr"
test_data = {'name': name}
return test_data
-def getData3():
+
+def get_data3():
+ """
+ Return a dictionary object with name #3
+ """
name = "Aasiyah Feisal"
test_data = {'name': name}
return test_data
def main():
+ """
+ Initializes the objects required for recording the rpc data, creates
+ the spans, and prints out collected data.
+ """
+
stats = stats_module.stats
view_manager = stats.view_manager
stats_recorder = stats.stats_recorder
+ tracer = Tracer(sampler=AlwaysOnSampler())
# Register view.
view_manager.register_view(VIDEO_SIZE_VIEW)
@@ -69,28 +90,27 @@ def main():
# Process video.
with tracer.span(name='span1'):
- getData1()
+ get_data1()
with tracer.span(name='span2'):
- getData2()
+ get_data2()
with tracer.span(name='span3'):
- getData3()
-
+ get_data3()
# Record the processed video size.
tag_value = tag_value_module.TagValue("mobile-ios9.3.5")
tag_map = tag_map_module.TagMap()
tag_map.insert(FRONTEND_KEY, tag_value)
measure_map = stats_recorder.new_measurement_map()
- measure_map.measure_int_put(VIDEO_SIZE_MEASURE, 25 * MiB)
+ measure_map.measure_int_put(VIDEO_SIZE_MEASURE, 25 * MIB)
measure_map.record(tag_map)
# Get aggregated stats and print it to console.
view_data = view_manager.get_view(VIDEO_SIZE_VIEW_NAME)
pprint(vars(view_data))
- for k, v in view_data._tag_value_aggregation_data_map.items():
+ for k, val in view_data._tag_value_aggregation_data_map.items():
pprint(k)
- pprint(vars(v))
+ pprint(vars(val))
if __name__ == '__main__':
- main()
\ No newline at end of file
+ main()
From 6a9d4ed7b9b87a19e4af1239d5afcba1ad3ae97a Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Sat, 29 Feb 2020 17:07:26 -0500
Subject: [PATCH 14/66] had a missing documentation
---
zpages/test_application/app.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/zpages/test_application/app.py b/zpages/test_application/app.py
index ceb93d36d..b59455cbb 100644
--- a/zpages/test_application/app.py
+++ b/zpages/test_application/app.py
@@ -32,6 +32,7 @@
from opencensus.tags import tag_map as tag_map_module
from opencensus.tags import tag_value as tag_value_module
+# constants within the video example on examples/helloworld/main.py
MIB = 1 << 20
FRONTEND_KEY = tag_key_module.TagKey("my.org/keys/frontend")
VIDEO_SIZE_MEASURE = measure_module.MeasureInt(
From ce1fbabaeeb54f188d93cb673f4eb82dcf4783ef Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 2 Mar 2020 11:04:06 -0500
Subject: [PATCH 15/66] added requirements.txt
---
requirements.txt | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 requirements.txt
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 000000000..cf78f1c71
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,2 @@
+Flask==1.1.1
+pylint==2.4.4
From 2619a1f2932cdad2e7629f8a3d4caa1813a5bd31 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 2 Mar 2020 11:20:01 -0500
Subject: [PATCH 16/66] instead of passing all params to html file, passing obj
now
---
zpages/rpc.py | 22 +--------------------
zpages/templates/index.html | 38 ++++++++++++++++++-------------------
2 files changed, 20 insertions(+), 40 deletions(-)
diff --git a/zpages/rpc.py b/zpages/rpc.py
index 1b259a8bc..a9878d3bb 100644
--- a/zpages/rpc.py
+++ b/zpages/rpc.py
@@ -69,28 +69,8 @@ def get_stats_snapshots(map, views):
def show_page():
direction_dummy = "Sent"
test_row = stat_snapshot('apicall1()', False, 1, 2, 3, '2020-02-18 23:46:31.243168', '2020-02-18 23:46:31.243168', '2020-02-18 23:46:31.243168', 1.1, 1.2, 1.3, 2.1, 2.2, 2.3, 3.1, 3.2, 3.3, 4, 5, 6)
+ return render_template("index.html", Direction=direction_dummy, obj=test_row)
- return render_template("index.html", Direction=direction_dummy,
- method=test_row.method,
- countMinute=test_row.countMinute,
- countHour=test_row.countHour,
- countTotal=test_row.countTotal,
- avgLatencyMinute=test_row.avgLatencyMinute,
- avgLatencyHour=test_row.avgLatencyHour,
- avgLatencyTotal=test_row.avgLatencyTotal,
- rpcRateMinute=test_row.rpcRateMinute,
- rpcRateHour=test_row.rpcRateHour,
- rpcRateTotal=test_row.rpcRateTotal,
- inputRateMinute=test_row.inputRateMinute,
- inputRateHour=test_row.inputRateHour,
- inputRateTotal=test_row.inputRateTotal,
- outputRateMinute=test_row.outputRateMinute,
- outputRateHour=test_row.outputRateHour,
- outputRateTotal=test_row.outputRateTotal,
- errorsMinute=test_row.errorsMinute,
- errorsHour=test_row.errorsHour,
- errorsTotal=test_row.errorsTotal)
-
if __name__ == '__main__':
app.run(debug=True)
\ No newline at end of file
diff --git a/zpages/templates/index.html b/zpages/templates/index.html
index 8fad23ed4..435ac60bc 100644
--- a/zpages/templates/index.html
+++ b/zpages/templates/index.html
@@ -26,26 +26,26 @@
{{rangeSnapshots}}
- {{method}}
+ {{obj.method}}
- {{countMinute}}
- {{countHour}}
- {{countTotal}}
- {{avgLatencyMinute}}
- {{avgLatencyHour}}
- {{avgLatencyTotal}}
- {{rpcRateMinute}}
- {{rpcRateHour}}
- {{rpcRateTotal}}
- {{inputRateMinute}}
- {{inputRateHour}}
- {{inputRateTotal}}
- {{outputRateMinute}}
- {{outputRateHour}}
- {{outputRateTotal}}
- {{errorsMinute}}
- {{errorsHour}}
- {{errorsTotal}}
+ {{obj.countMinute}}
+ {{obj.countHour}}
+ {{obj.countTotal}}
+ {{obj.avgLatencyMinute}}
+ {{obj.avgLatencyHour}}
+ {{obj.avgLatencyTotal}}
+ {{obj.rpcRateMinute}}
+ {{obj.rpcRateHour}}
+ {{obj.rpcRateTotal}}
+ {{obj.inputRateMinute}}
+ {{obj.inputRateHour}}
+ {{obj.inputRateTotal}}
+ {{obj.outputRateMinute}}
+ {{obj.outputRateHour}}
+ {{obj.outputRateTotal}}
+ {{obj.errorsMinute}}
+ {{obj.errorsHour}}
+ {{obj.errorsTotal}}
{{end}}
From da53501d4396af718a7af85a23792942673d9db5 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 2 Mar 2020 11:24:29 -0500
Subject: [PATCH 17/66] app.route specifies http request type
---
zpages/rpc.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/zpages/rpc.py b/zpages/rpc.py
index a9878d3bb..82a8d9548 100644
--- a/zpages/rpc.py
+++ b/zpages/rpc.py
@@ -65,8 +65,8 @@ def get_stats_snapshots(map, views):
#TODO getStats(snapshot, entry.getValue(), view, view_data.getWindowData());
-@app.route('/')
-def show_page():
+@app.route('/', methods=['GET'])
+def main():
direction_dummy = "Sent"
test_row = stat_snapshot('apicall1()', False, 1, 2, 3, '2020-02-18 23:46:31.243168', '2020-02-18 23:46:31.243168', '2020-02-18 23:46:31.243168', 1.1, 1.2, 1.3, 2.1, 2.2, 2.3, 3.1, 3.2, 3.3, 4, 5, 6)
return render_template("index.html", Direction=direction_dummy, obj=test_row)
From 2ea4661e3115f3598b8251e20846501dea527ead Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 2 Mar 2020 12:16:45 -0500
Subject: [PATCH 18/66] changed named tuple initialization to show params
instead of one line and ambig
---
zpages/rpc.py | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/zpages/rpc.py b/zpages/rpc.py
index 82a8d9548..d988725de 100644
--- a/zpages/rpc.py
+++ b/zpages/rpc.py
@@ -68,7 +68,26 @@ def get_stats_snapshots(map, views):
@app.route('/', methods=['GET'])
def main():
direction_dummy = "Sent"
- test_row = stat_snapshot('apicall1()', False, 1, 2, 3, '2020-02-18 23:46:31.243168', '2020-02-18 23:46:31.243168', '2020-02-18 23:46:31.243168', 1.1, 1.2, 1.3, 2.1, 2.2, 2.3, 3.1, 3.2, 3.3, 4, 5, 6)
+ test_row = stat_snapshot(method='api_call1()',
+ received=False,
+ countMinute=1,
+ countHour=2,
+ countTotal=3,
+ avgLatencyMinute='2020-02-18 23:46:31.243168',
+ avgLatencyHour='2020-02-18 23:46:31.243168',
+ avgLatencyTotal='2020-02-18 23:46:31.243168',
+ rpcRateMinute=1.1,
+ rpcRateHour=1.2,
+ rpcRateTotal=1.3,
+ inputRateMinute=2.1,
+ inputRateHour=2.2,
+ inputRateTotal=2.3,
+ outputRateMinute=3.1,
+ outputRateHour=3.2,
+ outputRateTotal=3.3,
+ errorsMinute=4,
+ errorsHour=5,
+ errorsTotal=6)
return render_template("index.html", Direction=direction_dummy, obj=test_row)
From 8d4764eac484623e0d274a05334db7b262e2d45b Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 2 Mar 2020 12:48:25 -0500
Subject: [PATCH 19/66] pylint fix
---
zpages/rpc.py | 18 +++++++++++++++++-
zpages/test_application/app.py | 3 ++-
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/zpages/rpc.py b/zpages/rpc.py
index d988725de..9e31adb34 100644
--- a/zpages/rpc.py
+++ b/zpages/rpc.py
@@ -1,3 +1,9 @@
+"""
+rpc.py is for collecting rpc data from an application, processing it,
+and displaying it on a RPC zpage.
+
+Uses stats, tracer, view_manager objects from opencensus framework
+"""
from flask import Flask, escape, request, render_template
from typing import NamedTuple
import sys
@@ -12,7 +18,11 @@
print(sys.path)
+
class stat_snapshot(NamedTuple):
+ """
+ stores and represents the essential rpc data needed for a row displayed on the rpc zpage
+ """
method: str
received: bool
countMinute: int
@@ -36,6 +46,12 @@ class stat_snapshot(NamedTuple):
class stat_group(NamedTuple):
+ """
+ stores and represents the row data (stat_snapshot) as well as which table this would fall under
+ on the rpc zpage tables
+
+
+ """
direction: str
snapshots: list # of type statSnapshot, can't specify explicitly but will only consist of this
@@ -92,4 +108,4 @@ def main():
if __name__ == '__main__':
- app.run(debug=True)
\ No newline at end of file
+ app.run(debug=True)
diff --git a/zpages/test_application/app.py b/zpages/test_application/app.py
index b59455cbb..5dfe50c1f 100644
--- a/zpages/test_application/app.py
+++ b/zpages/test_application/app.py
@@ -108,7 +108,8 @@ def main():
# Get aggregated stats and print it to console.
view_data = view_manager.get_view(VIDEO_SIZE_VIEW_NAME)
pprint(vars(view_data))
- for k, val in view_data._tag_value_aggregation_data_map.items():
+ # temp pylint fix: change back to protected member method by adding underscore in front
+ for k, val in view_data.tag_value_aggregation_data_map.items():
pprint(k)
pprint(vars(val))
From cc88019c20fcc7e8080906bbb2f25cca622dbca3 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 2 Mar 2020 13:42:10 -0500
Subject: [PATCH 20/66] specified list type for the stat inner classes, doc
still needs work
---
zpages/rpc.py | 31 ++++++++++++++++++++++++++-----
1 file changed, 26 insertions(+), 5 deletions(-)
diff --git a/zpages/rpc.py b/zpages/rpc.py
index 9e31adb34..206bb62a6 100644
--- a/zpages/rpc.py
+++ b/zpages/rpc.py
@@ -4,12 +4,13 @@
Uses stats, tracer, view_manager objects from opencensus framework
"""
-from flask import Flask, escape, request, render_template
-from typing import NamedTuple
+import datetime
import sys
+from flask import Flask, escape, request, render_template
+from typing import NamedTuple, List
from opencensus.stats import view as view_module
from opencensus.stats import view_manager as view_manager_module
-import datetime
+
app = Flask(__name__)
@@ -50,17 +51,37 @@ class stat_group(NamedTuple):
stores and represents the row data (stat_snapshot) as well as which table this would fall under
on the rpc zpage tables
+ :type direction string
+ :param direction: if the rpc is sent or received
+
+ :type list of class:`~opencensus.zpages.rpc.stat_snapshot`
+ :param snapshots: list of stat_snapshot objects for that specific direction
"""
direction: str
- snapshots: list # of type statSnapshot, can't specify explicitly but will only consist of this
+ snapshots: List[stat_snapshot]
class stat_page(NamedTuple):
- statgroups: list # of type statGroup, can't specify explicitly but will only consist of this
+ """
+ stores and represents all rpc data across different groups and rows of data
+
+ :type list of class: `~opencensus.zpages.rpc.stat_group`
+ :param statgroups: list of stat groups (received and sent) that together make up a page of stat data
+ """
+ statgroups: List[stat_group]
def get_stats_snapshots(map, views):
+ """
+ processes the ingested stats data and prints it out
+
+ : type map: `~opencensus.zpages.rpc.stat_snapshot` todo replace
+ : param map: todo
+
+ : type views: todo
+ : param view: todo
+ """
for view in views :
view_data = manager.get_view(manager,view.name)
if view_data is None:
From 7ef138e079e43128811bed2b57e523798437d2d3 Mon Sep 17 00:00:00 2001
From: Gaven Kerr
Date: Tue, 3 Mar 2020 19:52:22 -0500
Subject: [PATCH 21/66] doing some stuff
---
zpages/rpc.py | 132 --------------
zpages/rpczpage_handler.py | 358 +++++++++++++++++++++++++++++++++++++
zpages/zpage_handler.py | 25 +++
zpages/zpage_handlers.py | 14 ++
zpages/zpages.py | 0
5 files changed, 397 insertions(+), 132 deletions(-)
delete mode 100644 zpages/rpc.py
create mode 100644 zpages/rpczpage_handler.py
create mode 100644 zpages/zpage_handler.py
create mode 100644 zpages/zpage_handlers.py
delete mode 100644 zpages/zpages.py
diff --git a/zpages/rpc.py b/zpages/rpc.py
deleted file mode 100644
index 206bb62a6..000000000
--- a/zpages/rpc.py
+++ /dev/null
@@ -1,132 +0,0 @@
-"""
-rpc.py is for collecting rpc data from an application, processing it,
-and displaying it on a RPC zpage.
-
-Uses stats, tracer, view_manager objects from opencensus framework
-"""
-import datetime
-import sys
-from flask import Flask, escape, request, render_template
-from typing import NamedTuple, List
-from opencensus.stats import view as view_module
-from opencensus.stats import view_manager as view_manager_module
-
-
-
-app = Flask(__name__)
-
-manager = view_manager_module.ViewManager()
-
-print(sys.path)
-
-
-class stat_snapshot(NamedTuple):
- """
- stores and represents the essential rpc data needed for a row displayed on the rpc zpage
- """
- method: str
- received: bool
- countMinute: int
- countHour: int
- countTotal: int
- avgLatencyMinute: datetime.datetime
- avgLatencyHour: datetime.datetime
- avgLatencyTotal: datetime.datetime
- rpcRateMinute: float
- rpcRateHour: float
- rpcRateTotal: float
- inputRateMinute: float
- inputRateHour: float
- inputRateTotal: float
- outputRateMinute: float
- outputRateHour: float
- outputRateTotal: float
- errorsMinute: int
- errorsHour: int
- errorsTotal: int
-
-
-class stat_group(NamedTuple):
- """
- stores and represents the row data (stat_snapshot) as well as which table this would fall under
- on the rpc zpage tables
-
- :type direction string
- :param direction: if the rpc is sent or received
-
- :type list of class:`~opencensus.zpages.rpc.stat_snapshot`
- :param snapshots: list of stat_snapshot objects for that specific direction
-
- """
- direction: str
- snapshots: List[stat_snapshot]
-
-
-class stat_page(NamedTuple):
- """
- stores and represents all rpc data across different groups and rows of data
-
- :type list of class: `~opencensus.zpages.rpc.stat_group`
- :param statgroups: list of stat groups (received and sent) that together make up a page of stat data
- """
- statgroups: List[stat_group]
-
-
-def get_stats_snapshots(map, views):
- """
- processes the ingested stats data and prints it out
-
- : type map: `~opencensus.zpages.rpc.stat_snapshot` todo replace
- : param map: todo
-
- : type views: todo
- : param view: todo
- """
- for view in views :
- view_data = manager.get_view(manager,view.name)
- if view_data is None:
- continue
- for entry in view_data.tag_value_aggregation_data_map():
- tag_values = entry # Entry, AggregationData> entry
- # if len(tag_values):
- #
- #
- # old
- # for key in view_data.tag_value_aggregation_data_map(view_data).keys():
- # method = "" if key is None else key.asString()
- # snapshot = stat_snapshot(map.get(method))
- # if (snapshot is None) :
- # snapshot = stat_snapshot()
- # map.put(method, snapshot)
-
- #TODO getStats(snapshot, entry.getValue(), view, view_data.getWindowData());
-
-
-@app.route('/', methods=['GET'])
-def main():
- direction_dummy = "Sent"
- test_row = stat_snapshot(method='api_call1()',
- received=False,
- countMinute=1,
- countHour=2,
- countTotal=3,
- avgLatencyMinute='2020-02-18 23:46:31.243168',
- avgLatencyHour='2020-02-18 23:46:31.243168',
- avgLatencyTotal='2020-02-18 23:46:31.243168',
- rpcRateMinute=1.1,
- rpcRateHour=1.2,
- rpcRateTotal=1.3,
- inputRateMinute=2.1,
- inputRateHour=2.2,
- inputRateTotal=2.3,
- outputRateMinute=3.1,
- outputRateHour=3.2,
- outputRateTotal=3.3,
- errorsMinute=4,
- errorsHour=5,
- errorsTotal=6)
- return render_template("index.html", Direction=direction_dummy, obj=test_row)
-
-
-if __name__ == '__main__':
- app.run(debug=True)
diff --git a/zpages/rpczpage_handler.py b/zpages/rpczpage_handler.py
new file mode 100644
index 000000000..51813fb22
--- /dev/null
+++ b/zpages/rpczpage_handler.py
@@ -0,0 +1,358 @@
+from zpage_handler import ZPageHandler
+from opencensus.stats.view_manager import ViewManager
+import io
+
+from RpcViewConstants import RPC_CLIENT_ERROR_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_ERROR_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_ERROR_COUNT_VIEW
+from RpcViewConstants import RPC_CLIENT_FINISHED_COUNT_CUMULATIVE_VIEW
+from RpcViewConstants import RPC_CLIENT_FINISHED_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_FINISHED_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_REQUEST_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_REQUEST_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_REQUEST_BYTES_VIEW
+from RpcViewConstants import RPC_CLIENT_REQUEST_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_REQUEST_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_REQUEST_COUNT_VIEW
+from RpcViewConstants import RPC_CLIENT_RESPONSE_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_RESPONSE_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_RESPONSE_BYTES_VIEW
+from RpcViewConstants import RPC_CLIENT_RESPONSE_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_RESPONSE_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_RESPONSE_COUNT_VIEW
+from RpcViewConstants import RPC_CLIENT_ROUNDTRIP_LATENCY_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_ROUNDTRIP_LATENCY_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_ROUNDTRIP_LATENCY_VIEW
+from RpcViewConstants import RPC_CLIENT_STARTED_COUNT_CUMULATIVE_VIEW
+from RpcViewConstants import RPC_CLIENT_STARTED_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_STARTED_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_VIEW
+from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_VIEW
+from RpcViewConstants import RPC_SERVER_ERROR_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_ERROR_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_ERROR_COUNT_VIEW
+from RpcViewConstants import RPC_SERVER_FINISHED_COUNT_CUMULATIVE_VIEW
+from RpcViewConstants import RPC_SERVER_FINISHED_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_FINISHED_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_REQUEST_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_REQUEST_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_REQUEST_BYTES_VIEW
+from RpcViewConstants import RPC_SERVER_REQUEST_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_REQUEST_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_REQUEST_COUNT_VIEW
+from RpcViewConstants import RPC_SERVER_RESPONSE_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_RESPONSE_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_RESPONSE_BYTES_VIEW
+from RpcViewConstants import RPC_SERVER_RESPONSE_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_RESPONSE_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_RESPONSE_COUNT_VIEW
+from RpcViewConstants import RPC_SERVER_SERVER_ELAPSED_TIME_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_SERVER_LATENCY_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_SERVER_LATENCY_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_SERVER_LATENCY_VIEW
+from RpcViewConstants import RPC_SERVER_STARTED_COUNT_CUMULATIVE_VIEW
+from RpcViewConstants import RPC_SERVER_STARTED_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_STARTED_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_VIEW
+from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_VIEW
+
+class RpczZPageHandler():
+
+ my_view_manager = ViewManager()
+
+ RPCZ_URL = "/rpcz"
+ SENT = "Sent"
+ RECEIVED = "Received"
+ SECONDS_PER_MINUTE = 60.0
+ SECONDS_PER_HOUR = 3600.0
+ NANOS_PER_SECOND = 1e9
+ BYTES_PER_KB = 1024
+
+ RPC_STATS_TYPES = ("Count", "Avg latency (ms)", "Rate (rpc/s)", "Input (kb/s)", "Output (kb/s)", "Errors")
+
+ CLIENT_RPC_CUMULATIVE_VIEWS = (
+ RPC_CLIENT_ERROR_COUNT_VIEW,
+ RPC_CLIENT_ROUNDTRIP_LATENCY_VIEW,
+ RPC_CLIENT_REQUEST_BYTES_VIEW,
+ RPC_CLIENT_RESPONSE_BYTES_VIEW,
+ RPC_CLIENT_STARTED_COUNT_CUMULATIVE_VIEW,
+ RPC_CLIENT_REQUEST_COUNT_VIEW,
+ RPC_CLIENT_RESPONSE_COUNT_VIEW,
+ RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_VIEW,
+ RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_VIEW,
+ RPC_CLIENT_FINISHED_COUNT_CUMULATIVE_VIEW
+ )
+
+ SERVER_RPC_CUMULATIVE_VIEWS = (
+ RPC_SERVER_ERROR_COUNT_VIEW,
+ RPC_SERVER_SERVER_LATENCY_VIEW,
+ RPC_SERVER_REQUEST_BYTES_VIEW,
+ RPC_SERVER_RESPONSE_BYTES_VIEW,
+ RPC_SERVER_STARTED_COUNT_CUMULATIVE_VIEW,
+ # The last 5 views are not used yet.
+ RPC_SERVER_REQUEST_COUNT_VIEW,
+ RPC_SERVER_RESPONSE_COUNT_VIEW,
+ RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_VIEW,
+ RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_VIEW,
+ RPC_SERVER_FINISHED_COUNT_CUMULATIVE_VIEW
+ )
+
+ CLIENT_RPC_MINUTE_VIEWS = (
+ RPC_CLIENT_ERROR_COUNT_MINUTE_VIEW,
+ RPC_CLIENT_ROUNDTRIP_LATENCY_MINUTE_VIEW,
+ RPC_CLIENT_REQUEST_BYTES_MINUTE_VIEW,
+ RPC_CLIENT_RESPONSE_BYTES_MINUTE_VIEW,
+ RPC_CLIENT_STARTED_COUNT_MINUTE_VIEW,
+ # The last 5 views are not used yet.
+ RPC_CLIENT_REQUEST_COUNT_MINUTE_VIEW,
+ RPC_CLIENT_RESPONSE_COUNT_MINUTE_VIEW,
+ RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_MINUTE_VIEW,
+ RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_MINUTE_VIEW,
+ RPC_CLIENT_FINISHED_COUNT_MINUTE_VIEW
+ )
+
+ SERVER_RPC_MINUTE_VIEWS = (
+ RPC_SERVER_ERROR_COUNT_MINUTE_VIEW,
+ RPC_SERVER_SERVER_LATENCY_MINUTE_VIEW,
+ RPC_SERVER_REQUEST_BYTES_MINUTE_VIEW,
+ RPC_SERVER_RESPONSE_BYTES_MINUTE_VIEW,
+ RPC_SERVER_STARTED_COUNT_MINUTE_VIEW,
+ # The last 5 views are not used yet.
+ RPC_SERVER_REQUEST_COUNT_MINUTE_VIEW,
+ RPC_SERVER_RESPONSE_COUNT_MINUTE_VIEW,
+ RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_MINUTE_VIEW,
+ RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_MINUTE_VIEW,
+ RPC_SERVER_FINISHED_COUNT_MINUTE_VIEW
+ )
+
+ CLIENT_RPC_HOUR_VIEWS = (
+ RPC_CLIENT_ERROR_COUNT_HOUR_VIEW,
+ RPC_CLIENT_ROUNDTRIP_LATENCY_HOUR_VIEW,
+ RPC_CLIENT_REQUEST_BYTES_HOUR_VIEW,
+ RPC_CLIENT_RESPONSE_BYTES_HOUR_VIEW,
+ RPC_CLIENT_STARTED_COUNT_HOUR_VIEW,
+ # The last 5 views are not used yet.
+ RPC_CLIENT_REQUEST_COUNT_HOUR_VIEW,
+ RPC_CLIENT_RESPONSE_COUNT_HOUR_VIEW,
+ RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_HOUR_VIEW,
+ RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_HOUR_VIEW,
+ RPC_CLIENT_FINISHED_COUNT_HOUR_VIEW
+ )
+
+ SERVER_RPC_HOUR_VIEWS = (
+ RPC_SERVER_ERROR_COUNT_HOUR_VIEW,
+ RPC_SERVER_SERVER_LATENCY_HOUR_VIEW,
+ RPC_SERVER_SERVER_ELAPSED_TIME_HOUR_VIEW,
+ RPC_SERVER_REQUEST_BYTES_HOUR_VIEW,
+ RPC_SERVER_RESPONSE_BYTES_HOUR_VIEW,
+ RPC_SERVER_STARTED_COUNT_HOUR_VIEW,
+ # The last 5 views are not used yet.
+ RPC_SERVER_REQUEST_COUNT_HOUR_VIEW,
+ RPC_SERVER_RESPONSE_COUNT_HOUR_VIEW,
+ RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_HOUR_VIEW,
+ RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_HOUR_VIEW,
+ RPC_SERVER_FINISHED_COUNT_HOUR_VIEW
+ )
+
+ def get_url_path(self):
+ return self.RPCZ_URL
+
+ # Here we will need to do HTML writing
+ def emitStyle(self, out):
+ print("TODO")
+ # out.write("\n")
+
+ def emitHtml(self, dict, out):
+ print("TODO")
+# PrintWriter out =
+# new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream, Charsets.UTF_8)));
+# out.write("\n");
+# out.write("\n");
+# out.write(" \n");
+# out.write("RpcZ \n");
+# out.write(" \n");
+# out.write(
+# " \n");
+# out.write(
+# " \n");
+# emitStyle(out);
+# out.write("\n");
+# out.write("\n");
+# try {
+# emitHtmlBody(out);
+# } catch (Throwable t) {
+# out.write("Errors while generate the HTML page " + t);
+# }
+# out.write("\n");
+# out.write("\n");
+# out.close();
+# }
+
+# private void emitHtmlBody(PrintWriter out) {
+# Formatter formatter = new Formatter(out, Locale.US);
+# out.write(
+# "");
+# out.write("RPC Stats ");
+# out.write("
");
+# emitSummaryTable(out, formatter, /* isReceived= */ false);
+# emitSummaryTable(out, formatter, /* isReceived= */ true);
+# }
+
+# private void emitSummaryTable(PrintWriter out, Formatter formatter, boolean isReceived) {
+# formatter.format(
+# " ",
+# (isReceived ? RECEIVED : SENT));
+# formatter.format("");
+# emitSummaryTableHeader(out, formatter);
+# Map snapshots = getStatsSnapshots(isReceived);
+# for (Entry entry : snapshots.entrySet()) {
+# emitSummaryTableRows(out, formatter, entry.getValue(), entry.getKey());
+# }
+# out.write("
");
+# out.write(" ");
+# }
+
+
+ZPageHandler.register(RpczZPageHandler)
+
+
+# import datetime
+# import sys
+# from flask import Flask, escape, request, render_template
+# from typing import NamedTuple, List
+# from opencensus.stats import view as view_module
+# from opencensus.stats import view_manager as view_manager_module
+
+
+
+# app = Flask(__name__)
+
+# manager = view_manager_module.ViewManager()
+
+# print(sys.path)
+
+
+# class stat_snapshot(NamedTuple):
+# """
+# stores and represents the essential rpc data needed for a row displayed on the rpc zpage
+# """
+# method: str
+# received: bool
+# countMinute: int
+# countHour: int
+# countTotal: int
+# avgLatencyMinute: datetime.datetime
+# avgLatencyHour: datetime.datetime
+# avgLatencyTotal: datetime.datetime
+# rpcRateMinute: float
+# rpcRateHour: float
+# rpcRateTotal: float
+# inputRateMinute: float
+# inputRateHour: float
+# inputRateTotal: float
+# outputRateMinute: float
+# outputRateHour: float
+# outputRateTotal: float
+# errorsMinute: int
+# errorsHour: int
+# errorsTotal: int
+
+
+# class stat_group(NamedTuple):
+# """
+# stores and represents the row data (stat_snapshot) as well as which table this would fall under
+# on the rpc zpage tables
+
+# :type direction string
+# :param direction: if the rpc is sent or received
+
+# :type list of class:`~opencensus.zpages.rpc.stat_snapshot`
+# :param snapshots: list of stat_snapshot objects for that specific direction
+
+# """
+# direction: str
+# snapshots: List[stat_snapshot]
+
+
+# class stat_page(NamedTuple):
+# """
+# stores and represents all rpc data across different groups and rows of data
+
+# :type list of class: `~opencensus.zpages.rpc.stat_group`
+# :param statgroups: list of stat groups (received and sent) that together make up a page of stat data
+# """
+# statgroups: List[stat_group]
+
+
+# def get_stats_snapshots(map, views):
+# """
+# processes the ingested stats data and prints it out
+
+# : type map: `~opencensus.zpages.rpc.stat_snapshot` todo replace
+# : param map: todo
+
+# : type views: todo
+# : param view: todo
+# """
+# for view in views :
+# view_data = manager.get_view(manager,view.name)
+# if view_data is None:
+# continue
+# for entry in view_data.tag_value_aggregation_data_map():
+# tag_values = entry # Entry, AggregationData> entry
+# # if len(tag_values):
+# #
+# #
+# # old
+# # for key in view_data.tag_value_aggregation_data_map(view_data).keys():
+# # method = "" if key is None else key.asString()
+# # snapshot = stat_snapshot(map.get(method))
+# # if (snapshot is None) :
+# # snapshot = stat_snapshot()
+# # map.put(method, snapshot)
+
+# # getStats(snapshot, entry.getValue(), view, view_data.getWindowData())
+
+
+# @app.route('/', methods=['GET'])
+# def main():
+# direction_dummy = "Sent"
+# test_row = stat_snapshot(method='api_call1()',
+# received=False,
+# countMinute=1,
+# countHour=2,
+# countTotal=3,
+# avgLatencyMinute='2020-02-18 23:46:31.243168',
+# avgLatencyHour='2020-02-18 23:46:31.243168',
+# avgLatencyTotal='2020-02-18 23:46:31.243168',
+# rpcRateMinute=1.1,
+# rpcRateHour=1.2,
+# rpcRateTotal=1.3,
+# inputRateMinute=2.1,
+# inputRateHour=2.2,
+# inputRateTotal=2.3,
+# outputRateMinute=3.1,
+# outputRateHour=3.2,
+# outputRateTotal=3.3,
+# errorsMinute=4,
+# errorsHour=5,
+# errorsTotal=6)
+# return render_template("index.html", Direction=direction_dummy, obj=test_row)
+
+
+# if __name__ == '__main__':
+# app.run(debug=True)
diff --git a/zpages/zpage_handler.py b/zpages/zpage_handler.py
new file mode 100644
index 000000000..2f73a3878
--- /dev/null
+++ b/zpages/zpage_handler.py
@@ -0,0 +1,25 @@
+from abc import ABC, abstractmethod
+
+class ZPageHandler(ABC):
+
+# Returns the URL path that should be used to register this page.
+# @return the URL path that should be used to register this page.
+ @abstractmethod
+ def get_url_path(self):
+ pass
+
+
+# Emits the HTML generated page to the {@code outputStream}.
+# @param queryMap the query components map.
+# @param outputStream the output {@code OutputStream}.
+ @abstractmethod
+ def emit_html(self):
+ pass
+
+ @classmethod
+ def __subclasshook__(cls, C):
+ if cls is ZPageHandler:
+ if any("get_url_path" in B.__dict__ for B in C.__mro__):
+ if any("emit_html" in B.__dict__ for B in C.__mro__):
+ return True
+ return NotImplemented
diff --git a/zpages/zpage_handlers.py b/zpages/zpage_handlers.py
new file mode 100644
index 000000000..b72ed41f3
--- /dev/null
+++ b/zpages/zpage_handlers.py
@@ -0,0 +1,14 @@
+
+class ZPageHandlers:
+
+# Starts an {@code HttpServer} and registers all pages to it. When the JVM shuts down the server
+# is stopped.
+
+# Users must call this function only once per process.
+
+# @param port the port used to bind the {@code HttpServer}.
+# @throws IllegalStateException if the server is already started.
+# @throws IOException if the server cannot bind to the requested address.
+# @since 0.6
+ def start_http_server_and_register_all(self, port):
+ print("start servers on" + port)
\ No newline at end of file
diff --git a/zpages/zpages.py b/zpages/zpages.py
deleted file mode 100644
index e69de29bb..000000000
From 9f71e6c81ab01d0c37690a979b34bee4d38ec854 Mon Sep 17 00:00:00 2001
From: Gaven Kerr
Date: Tue, 3 Mar 2020 20:11:39 -0500
Subject: [PATCH 22/66] anam is going to move the files around
---
zpages/rpczpage_handler.py | 109 ++++++++++++++++++-------------------
zpages/style.py | 52 ++++++++++++++++++
2 files changed, 104 insertions(+), 57 deletions(-)
create mode 100644 zpages/style.py
diff --git a/zpages/rpczpage_handler.py b/zpages/rpczpage_handler.py
index 51813fb22..a3cf78c61 100644
--- a/zpages/rpczpage_handler.py
+++ b/zpages/rpczpage_handler.py
@@ -1,6 +1,8 @@
+import io
from zpage_handler import ZPageHandler
from opencensus.stats.view_manager import ViewManager
-import io
+
+from style import Style
from RpcViewConstants import RPC_CLIENT_ERROR_COUNT_HOUR_VIEW
from RpcViewConstants import RPC_CLIENT_ERROR_COUNT_MINUTE_VIEW
@@ -166,65 +168,58 @@ def get_url_path(self):
return self.RPCZ_URL
# Here we will need to do HTML writing
- def emitStyle(self, out):
+ def emitStyle(self, out):
print("TODO")
- # out.write("\n")
+ out.write("\n")
- def emitHtml(self, dict, out):
+ def emitHtml(self, out):
print("TODO")
-# PrintWriter out =
-# new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream, Charsets.UTF_8)));
-# out.write("\n");
-# out.write("\n");
-# out.write(" \n");
-# out.write("RpcZ \n");
-# out.write(" \n");
-# out.write(
-# " \n");
-# out.write(
-# " \n");
-# emitStyle(out);
-# out.write("\n");
-# out.write("\n");
-# try {
-# emitHtmlBody(out);
-# } catch (Throwable t) {
-# out.write("Errors while generate the HTML page " + t);
-# }
-# out.write("\n");
-# out.write("\n");
-# out.close();
-# }
-
-# private void emitHtmlBody(PrintWriter out) {
-# Formatter formatter = new Formatter(out, Locale.US);
-# out.write(
-# "");
-# out.write("RPC Stats ");
-# out.write("
");
-# emitSummaryTable(out, formatter, /* isReceived= */ false);
-# emitSummaryTable(out, formatter, /* isReceived= */ true);
-# }
-
-# private void emitSummaryTable(PrintWriter out, Formatter formatter, boolean isReceived) {
-# formatter.format(
-# " ",
-# (isReceived ? RECEIVED : SENT));
-# formatter.format("");
-# emitSummaryTableHeader(out, formatter);
-# Map snapshots = getStatsSnapshots(isReceived);
-# for (Entry entry : snapshots.entrySet()) {
-# emitSummaryTableRows(out, formatter, entry.getValue(), entry.getKey());
-# }
-# out.write("
");
-# out.write(" ");
-# }
+ out = io.StringIO()
+ out.write("\n")
+ out.write("\n")
+ out.write(" \n")
+ out.write("RpcZ \n")
+ out.write(" \n")
+ out.write(" \n")
+ out.write(" \n")
+ self.emitStyle(out)
+ out.write("\n")
+ out.write("\n")
+ try:
+ emitHtmlBody(self, out)
+ except:
+ out.write("Errors while generate the HTML page ")
+ out.write("\n")
+ out.write("\n")
+ out.close()
+
+ # private void emitHtmlBody(PrintWriter out) {
+ # Formatter formatter = new Formatter(out, Locale.US);
+ # out.write(
+ # "");
+ # out.write("RPC Stats ");
+ # out.write("
");
+ # emitSummaryTable(out, formatter, /* isReceived= */ false);
+ # emitSummaryTable(out, formatter, /* isReceived= */ true);
+ # }
+
+ # private void emitSummaryTable(PrintWriter out, Formatter formatter, boolean isReceived) {
+ # formatter.format(
+ # " ",
+ # (isReceived ? RECEIVED : SENT));
+ # formatter.format("");
+ # emitSummaryTableHeader(out, formatter);
+ # Map snapshots = getStatsSnapshots(isReceived);
+ # for (Entry entry : snapshots.entrySet()) {
+ # emitSummaryTableRows(out, formatter, entry.getValue(), entry.getKey());
+ # }
+ # out.write("
");
+ # out.write(" ");
ZPageHandler.register(RpczZPageHandler)
diff --git a/zpages/style.py b/zpages/style.py
new file mode 100644
index 000000000..61fcfdfbe
--- /dev/null
+++ b/zpages/style.py
@@ -0,0 +1,52 @@
+class Style:
+
+ style = """body{font-family: 'Roboto',sans-serif;
+ font-size: 14px;background-color: #F2F4EC;}
+ h1{color: #3D3D3D;text-align: center;margin-bottom: 20px;}
+ p{padding: 0 0.5em;color: #3D3D3D;}
+ h2{color: #3D3D3D;font-size: 1.5em;background-color: #FFF;
+ line-height: 2.0;margin-bottom: 0;padding: 0 0.5em;}
+ h3{font-size:16px;padding:0 0.5em;margin-top:6px;margin-bottom:25px;}
+ a{color:#A94442;}
+ p.header{font-family: 'Open Sans', sans-serif;top: 0;left: 0;width: 100%;
+ height: 60px;vertical-align: middle;color: #C1272D;font-size: 22pt;}"
+ p.view{font-size: 20px;margin-bottom: 0;}
+ .header span{color: #3D3D3D;}
+ img.oc{vertical-align: middle;}
+ table{width: 100%;color: #FFF;background-color: #FFF;overflow: hidden;
+ margin-bottom: 30px;margin-top: 0;border-bottom: 1px solid #3D3D3D;
+ border-left: 1px solid #3D3D3D;border-right: 1px solid #3D3D3D;}
+ table.title{width:100%;color:#3D3D3D;background-color:#FFF;
+ border:none;line-height:2.0;margin-bottom:0;}
+ thead{color: #FFF;background-color: #A94442;
+ line-height:3.0;padding:0 0.5em;}
+ th{color: #FFF;background-color: #A94442;
+ line-height:3.0;padding:0 0.5em;}
+ th.borderL{border-left:1px solid #FFF; text-align:left;}
+ th.borderRL{border-right:1px solid #FFF; text-align:left;}
+ th.borderLB{border-left:1px solid #FFF;
+ border-bottom:1px solid #FFF;margin:0 10px;}
+ tr.direct{font-size:16px;padding:0 0.5em;background-color:#F2F4EC;}
+ tr:nth-child(even){background-color: #F2F2F2;}
+ td{color: #3D3D3D;line-height: 2.0;text-align: left;padding: 0 0.5em;}
+ td.borderLC{border-left:1px solid #3D3D3D;text-align:center;}
+ td.borderLL{border-left:1px solid #3D3D3D;text-align:left;}
+ td.borderRL{border-right:1px solid #3D3D3D;text-align:left;}
+ td.borderRW{border-right:1px solid #FFF}
+ td.borderLW{border-left:1px solid #FFF;}
+ td.centerW{text-align:center;color:#FFF;}
+ td.center{text-align:center;color:#3D3D3D;}
+ tr.bgcolor{background-color:#A94442;}
+ h1.left{text-align:left;margin-left:20px;}
+ table.small{width:40%;background-color:#FFF;
+ margin-left:20px;margin-bottom:30px;}
+ table.small{width:40%;background-color:#FFF;
+ margin-left:20px;margin-bottom:30px;}
+ td.col_headR{background-color:#A94442;
+ line-height:3.0;color:#FFF;border-right:1px solid #FFF;}
+ td.col_head{background-color:#A94442;
+ line-height:3.0;color:#FFF;}
+ b.title{margin-left:20px;font-weight:bold;line-height:2.0;}
+ input.button{margin-left:20px;margin-top:4px;
+ font-size:20px;width:80px;height:60px;}
+ td.head{text-align:center;color:#FFF;line-height:3.0;}"""
From d0cd27b210198716bd56eb8b974b33986b456c45 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Tue, 3 Mar 2020 20:13:01 -0500
Subject: [PATCH 23/66] added stuff to zpage_tester (NW) and moved zpages
folder
---
.../stats.py => opencensus/zpages/__init__.py | 0
.../zpages}/rpczpage_handler.py | 0
.../template.py => opencensus/zpages/stats.py | 0
.../zpages}/statssnapshot.py | 0
{zpages => opencensus/zpages}/style.py | 0
.../trace.py => opencensus/zpages/template.py | 0
.../zpages}/templates/index.html | 0
.../zpages/test_application/__init__.py | 0
.../zpages}/test_application/app.py | 0
opencensus/zpages/trace.py | 0
.../zpages}/zpage_handler.py | 0
.../zpages}/zpage_handlers.py | 0
opencensus/zpages/zpage_tester.py | 37 +++++++++++++++++++
13 files changed, 37 insertions(+)
rename zpages/stats.py => opencensus/zpages/__init__.py (100%)
rename {zpages => opencensus/zpages}/rpczpage_handler.py (100%)
rename zpages/template.py => opencensus/zpages/stats.py (100%)
rename {zpages => opencensus/zpages}/statssnapshot.py (100%)
rename {zpages => opencensus/zpages}/style.py (100%)
rename zpages/trace.py => opencensus/zpages/template.py (100%)
rename {zpages => opencensus/zpages}/templates/index.html (100%)
create mode 100644 opencensus/zpages/test_application/__init__.py
rename {zpages => opencensus/zpages}/test_application/app.py (100%)
create mode 100644 opencensus/zpages/trace.py
rename {zpages => opencensus/zpages}/zpage_handler.py (100%)
rename {zpages => opencensus/zpages}/zpage_handlers.py (100%)
create mode 100644 opencensus/zpages/zpage_tester.py
diff --git a/zpages/stats.py b/opencensus/zpages/__init__.py
similarity index 100%
rename from zpages/stats.py
rename to opencensus/zpages/__init__.py
diff --git a/zpages/rpczpage_handler.py b/opencensus/zpages/rpczpage_handler.py
similarity index 100%
rename from zpages/rpczpage_handler.py
rename to opencensus/zpages/rpczpage_handler.py
diff --git a/zpages/template.py b/opencensus/zpages/stats.py
similarity index 100%
rename from zpages/template.py
rename to opencensus/zpages/stats.py
diff --git a/zpages/statssnapshot.py b/opencensus/zpages/statssnapshot.py
similarity index 100%
rename from zpages/statssnapshot.py
rename to opencensus/zpages/statssnapshot.py
diff --git a/zpages/style.py b/opencensus/zpages/style.py
similarity index 100%
rename from zpages/style.py
rename to opencensus/zpages/style.py
diff --git a/zpages/trace.py b/opencensus/zpages/template.py
similarity index 100%
rename from zpages/trace.py
rename to opencensus/zpages/template.py
diff --git a/zpages/templates/index.html b/opencensus/zpages/templates/index.html
similarity index 100%
rename from zpages/templates/index.html
rename to opencensus/zpages/templates/index.html
diff --git a/opencensus/zpages/test_application/__init__.py b/opencensus/zpages/test_application/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/zpages/test_application/app.py b/opencensus/zpages/test_application/app.py
similarity index 100%
rename from zpages/test_application/app.py
rename to opencensus/zpages/test_application/app.py
diff --git a/opencensus/zpages/trace.py b/opencensus/zpages/trace.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/zpages/zpage_handler.py b/opencensus/zpages/zpage_handler.py
similarity index 100%
rename from zpages/zpage_handler.py
rename to opencensus/zpages/zpage_handler.py
diff --git a/zpages/zpage_handlers.py b/opencensus/zpages/zpage_handlers.py
similarity index 100%
rename from zpages/zpage_handlers.py
rename to opencensus/zpages/zpage_handlers.py
diff --git a/opencensus/zpages/zpage_tester.py b/opencensus/zpages/zpage_tester.py
new file mode 100644
index 000000000..2b2995a59
--- /dev/null
+++ b/opencensus/zpages/zpage_tester.py
@@ -0,0 +1,37 @@
+from opencensus.stats import view_manager as view_manager_module
+
+#Tags.java, Tagger.java, TagValue.java
+from opencensus.tags import tag_value as tag_value_module
+from opencensus.stats import stats
+from opencensus.trace import tracer
+from opencensus.tags import tag
+from opencensus.tags import tag_value
+from opencensus.zpages import zpage_handlers
+
+class ZPage_Tester():
+
+ # tagger = tag.getTagger(); #of type Tagger in java todo
+ tracer = tracer.tracer #of type Tracer
+ statsRecorder = stats.stats_recorder #of type StatsRecorder
+
+ SPAN_NAME = "EXAMPLE_SPAN"
+ METHOD = tag_value("ExampleMethod")
+
+ def __init__(self):
+ # no body, does nothing
+
+
+ def record_example_data():
+ pass
+
+ def main(self):
+ record_example_data()
+
+if __name__ == '__main__':
+ zpage_Handlers.start_http_server_and_register_all(8080)
+ ZPage_Tester.record_example_data()
+
+
+
+
+
From 0b8fa101b75e7da932e26d82b6b5b058242a06e7 Mon Sep 17 00:00:00 2001
From: Gaven Kerr
Date: Tue, 3 Mar 2020 22:30:59 -0500
Subject: [PATCH 24/66] this file is written. Need to finish testers and
Handlers
---
opencensus/zpages/rpczpage_handler.py | 322 ++++++++++++-----
zpages/rpczpage_handler.py | 498 ++++++++++++++++++++++++++
2 files changed, 737 insertions(+), 83 deletions(-)
create mode 100644 zpages/rpczpage_handler.py
diff --git a/opencensus/zpages/rpczpage_handler.py b/opencensus/zpages/rpczpage_handler.py
index a3cf78c61..b0f83108f 100644
--- a/opencensus/zpages/rpczpage_handler.py
+++ b/opencensus/zpages/rpczpage_handler.py
@@ -1,8 +1,11 @@
import io
-from zpage_handler import ZPageHandler
+from datetime import time, datetime
+from typing import NamedTuple
+
from opencensus.stats.view_manager import ViewManager
from style import Style
+from zpage_handler import ZPageHandler
from RpcViewConstants import RPC_CLIENT_ERROR_COUNT_HOUR_VIEW
from RpcViewConstants import RPC_CLIENT_ERROR_COUNT_MINUTE_VIEW
@@ -68,7 +71,7 @@
class RpczZPageHandler():
- my_view_manager = ViewManager()
+ manager = ViewManager()
RPCZ_URL = "/rpcz"
SENT = "Sent"
@@ -78,7 +81,12 @@ class RpczZPageHandler():
NANOS_PER_SECOND = 1e9
BYTES_PER_KB = 1024
- RPC_STATS_TYPES = ("Count", "Avg latency (ms)", "Rate (rpc/s)", "Input (kb/s)", "Output (kb/s)", "Errors")
+ RPC_STATS_TYPES = ("Count", \
+ "Avg latency (ms)", \
+ "Rate (rpc/s)", \
+ "Input (kb/s)", \
+ "Output (kb/s)", \
+ "Errors")
CLIENT_RPC_CUMULATIVE_VIEWS = (
RPC_CLIENT_ERROR_COUNT_VIEW,
@@ -168,108 +176,255 @@ def get_url_path(self):
return self.RPCZ_URL
# Here we will need to do HTML writing
- def emitStyle(self, out):
+ def emit_style(self, out):
print("TODO")
out.write("\n")
- def emitHtml(self, out):
- print("TODO")
+ def emit_html(self, out):
out = io.StringIO()
out.write("\n")
out.write("\n")
out.write(" \n")
out.write("RpcZ \n")
- out.write(" \n")
- out.write(" \n")
- out.write(" \n")
- self.emitStyle(out)
+ out.write(" \n")
+ out.write(" \n")
+ out.write(" \n")
+ self.emit_style(out)
out.write("\n")
out.write("\n")
try:
- emitHtmlBody(self, out)
+ emit_html_body(self, out)
except:
out.write("Errors while generate the HTML page ")
out.write("\n")
out.write("\n")
out.close()
- # private void emitHtmlBody(PrintWriter out) {
- # Formatter formatter = new Formatter(out, Locale.US);
- # out.write(
- # "");
- # out.write("RPC Stats ");
- # out.write("
");
- # emitSummaryTable(out, formatter, /* isReceived= */ false);
- # emitSummaryTable(out, formatter, /* isReceived= */ true);
- # }
-
- # private void emitSummaryTable(PrintWriter out, Formatter formatter, boolean isReceived) {
- # formatter.format(
- # " ",
- # (isReceived ? RECEIVED : SENT));
- # formatter.format("");
- # emitSummaryTableHeader(out, formatter);
- # Map snapshots = getStatsSnapshots(isReceived);
- # for (Entry entry : snapshots.entrySet()) {
- # emitSummaryTableRows(out, formatter, entry.getValue(), entry.getKey());
- # }
- # out.write("
");
- # out.write(" ");
-
-
-ZPageHandler.register(RpczZPageHandler)
-
-
-# import datetime
-# import sys
-# from flask import Flask, escape, request, render_template
-# from typing import NamedTuple, List
-# from opencensus.stats import view as view_module
-# from opencensus.stats import view_manager as view_manager_module
-
-
-
-# app = Flask(__name__)
-
-# manager = view_manager_module.ViewManager()
-
-# print(sys.path)
-
-
-# class stat_snapshot(NamedTuple):
-# """
-# stores and represents the essential rpc data needed for a row displayed on the rpc zpage
-# """
-# method: str
-# received: bool
-# countMinute: int
-# countHour: int
-# countTotal: int
-# avgLatencyMinute: datetime.datetime
-# avgLatencyHour: datetime.datetime
-# avgLatencyTotal: datetime.datetime
-# rpcRateMinute: float
-# rpcRateHour: float
-# rpcRateTotal: float
-# inputRateMinute: float
-# inputRateHour: float
-# inputRateTotal: float
-# outputRateMinute: float
-# outputRateHour: float
-# outputRateTotal: float
-# errorsMinute: int
-# errorsHour: int
-# errorsTotal: int
+ def emit_html_body(self, out):
+ out.write("")
+ out.write("RPC Stats ")
+ out.write("
")
+ self.emit_summary_table(out, False)
+ self.emit_summary_table(out, True)
+
+ def emit_summary_table(self, out, is_received):
+ format_str = " "
+ format_str.format(self.RECEIVED if is_received else self.SENT)
+ out.write(format_str)
+ format_str = ""
+ out.write(format_str)
+ self.emit_summary_table_header(out)
+ snapshots = self.get_stats_snapshots(is_received)
+ for entry in snapshots: #check what snapshot returns
+ self.emit_summary_table_rows(out, snapshots[entry], entry) #check what entry contrains
+ out.write("
")
+ out.write(" ")
+
+ def emit_summary_table_header(self, out):
+ #First line.
+ out.write("")
+ out.write(" ")
+ for rpc_stats_type in self.RPC_STATS_TYPES:
+ formatter = "{} "
+ to_print = formatter.format(rpc_stats_type)
+ out.write(to_print)
+ out.write(" ")
+
+ #Second line.
+ out.write("")
+ out.write("Method \n")
+ out.write(" ")
+ for index in range(0, len(self.RPC_STATS_TYPES)):
+ out.write("Min. \n")
+ out.write("Hr. \n")
+ out.write("Tot. ")
+
+ def emit_summary_table_rows(self, out, snapshot, method):
+ out.write(" ")
+ to_print = "{} "
+ out.write(to_print.format(method))
+ out.write(" ")
+ to_print = "{} "
+ out.write(to_print.format(snapshot.countLastMinute))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.countLastHour))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.countTotal))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.avgLatencyLastMinute))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.avgLatencyLastHour))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.avgLatencyTotal))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.rpcRateLastMinute))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.rpcRateLastHour))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.rpcRateTotal))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.inputRateLastMinute))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.inputRateLastHour))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.inputRateTotal))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.outputRateLastMinute))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.outputRateLastHour))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.outputRateTotal))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.errorsLastMinute))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.errorsLastHour))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.errorsTotal))
+ out.write(" ")
+
+ def get_stats_snapshots(self, is_received):
+ stats_map = dict() # Sorted by method name.
+ if is_received:
+ self.get_snapshots(stats_map, self.SERVER_RPC_CUMULATIVE_VIEWS)
+ self.get_snapshots(stats_map, self.SERVER_RPC_MINUTE_VIEWS)
+ self.get_snapshots(stats_map, self.SERVER_RPC_HOUR_VIEWS)
+ else:
+ self.get_snapshots(stats_map, self.CLIENT_RPC_CUMULATIVE_VIEWS)
+ self.get_snapshots(stats_map, self.CLIENT_RPC_MINUTE_VIEWS)
+ self.get_snapshots(stats_map, self.CLIENT_RPC_HOUR_VIEWS)
+ return stats_map
+
+ def get_snapshots(self, data_map, views):
+ for view in views:
+ view_data = self.manager.get_view(view.name)
+ if view_data is None:
+ continue
+ for entry in view_data.tag_value_aggregation_data_map().entrySet:
+ #confused about what type of object tag_value_aggregation_data_map returns
+ tag_values = entry #
+ if len(tag_values) == 1:
+ tag_value = tag_values[0]
+ else:
+ tag_value = tag_values[1]
+ method = "" if tag_value is None else tag_value
+ snapshot = StatSnapshot(data_map.get(method))
+ if snapshot is None:
+ snapshot = StatSnapshot()
+ data_map.put(method, snapshot)
+ self.get_stats(snapshot, entry.get_value(), view, view_data.get_window_data())
+
+ # Gets RPC stats by its view definition, and set it to stats snapshot.
+ def get_stats(self, snapshot, data, view, window_data):
+ if view == RPC_CLIENT_ROUNDTRIP_LATENCY_VIEW or view == RPC_SERVER_SERVER_LATENCY_VIEW:
+ snapshot.avg_latency_total = data.mean_data()
+ elif view == RPC_CLIENT_ROUNDTRIP_LATENCY_MINUTE_VIEW \
+ or view == RPC_SERVER_SERVER_LATENCY_MINUTE_VIEW:
+ snapshot.avg_latency_minute = data.mean_data()
+ elif view == RPC_CLIENT_ROUNDTRIP_LATENCY_HOUR_VIEW \
+ or view == RPC_SERVER_SERVER_LATENCY_HOUR_VIEW:
+ snapshot.avgLatencyLastHour = data.mean_data()
+ elif view == RPC_CLIENT_ERROR_COUNT_VIEW or view == RPC_SERVER_ERROR_COUNT_VIEW:
+ snapshot.errors_total = data.count_data()
+ elif view == RPC_CLIENT_ERROR_COUNT_MINUTE_VIEW \
+ or view == RPC_SERVER_ERROR_COUNT_MINUTE_VIEW:
+ snapshot.errors_minute = data.count_data()
+ elif view == RPC_CLIENT_ERROR_COUNT_HOUR_VIEW or view == RPC_SERVER_ERROR_COUNT_HOUR_VIEW:
+ snapshot.errors_hour = data.count_data()
+ elif view == RPC_CLIENT_REQUEST_BYTES_VIEW or view == RPC_SERVER_REQUEST_BYTES_VIEW:
+ snapshot.input_rate_total = data.count_data() \
+ * data.mean_data() \
+ / self.BYTES_PER_KB \
+ / self.get_duration_in_secs(window_data)
+ elif view == RPC_CLIENT_REQUEST_BYTES_MINUTE_VIEW \
+ or view == RPC_SERVER_REQUEST_BYTES_MINUTE_VIEW:
+ snapshot.input_rate_minute = data.mean_data() * data.count_data() \
+ / self.BYTES_PER_KB / self.SECONDS_PER_MINUTE
+ elif view == RPC_CLIENT_REQUEST_BYTES_HOUR_VIEW \
+ or view == RPC_SERVER_REQUEST_BYTES_HOUR_VIEW:
+ snapshot.input_rate_hour = data.mean_data() * data.count_data() \
+ / self.BYTES_PER_KB / self.SECONDS_PER_HOUR
+ elif view == RPC_CLIENT_RESPONSE_BYTES_VIEW \
+ or view == RPC_SERVER_RESPONSE_BYTES_VIEW:
+ snapshot.output_rate_total = data.count_data() \
+ * data.mean_data() \
+ / self.BYTES_PER_KB \
+ / self.get_duration_in_secs(window_data)
+ elif view == RPC_CLIENT_RESPONSE_BYTES_MINUTE_VIEW \
+ or view == RPC_SERVER_RESPONSE_BYTES_MINUTE_VIEW:
+ snapshot.output_rateminute = data.mean_data() * data.count_data() \
+ / self.BYTES_PER_KB / self.SECONDS_PER_MINUTE
+ elif view == RPC_CLIENT_RESPONSE_BYTES_HOUR_VIEW \
+ or view == RPC_SERVER_RESPONSE_BYTES_HOUR_VIEW:
+ snapshot.output_rate_hour = data.mean_data() * data.count_data() \
+ / self.BYTES_PER_KB / self.SECONDS_PER_HOUR
+ elif view == RPC_CLIENT_STARTED_COUNT_MINUTE_VIEW \
+ or view == RPC_SERVER_STARTED_COUNT_MINUTE_VIEW:
+ snapshot.count_minute = data.count_data()
+ snapshot.rpc_rate_minute = snapshot.count_minute / self.SECONDS_PER_MINUTE
+ elif view == RPC_CLIENT_STARTED_COUNT_HOUR_VIEW \
+ or view == RPC_SERVER_STARTED_COUNT_HOUR_VIEW:
+ snapshot.count_hour = data.count_data()
+ snapshot.rpc_rate_hour = snapshot.count_hour / self.SECONDS_PER_HOUR
+ elif view == RPC_CLIENT_STARTED_COUNT_CUMULATIVE_VIEW \
+ or view == RPC_SERVER_STARTED_COUNT_CUMULATIVE_VIEW:
+ snapshot.count_total = data.count_data()
+ snapshot.rpc_rate_total = snapshot.count_total \
+ / self.get_duration_in_secs(window_data)
+
+ # Calculates the duration of the given CumulativeData in seconds.
+ def get_duration_in_secs(self, cumulative_data):
+ d1 = datetime.strptime(cumulative_data.end_time, "%Y-%m-%d %H:%M:%S.%f")
+ d2 = datetime.strptime(cumulative_data.start_time, "%Y-%m-%d %H:%M:%S.%f")
+ self.to_double_seconds(d1-d2)
+
+ def to_double_seconds(self, cumulative_data):
+ time.mktime(cumulative_data.timetuple())
+
+ def create(self, manager):
+ return self.__init__(manager)
+
+ def __init__(self, manager):
+ self.manager = manager
+ ZPageHandler.register(RpczZPageHandler)
+
+
+class StatSnapshot(NamedTuple):
+ """
+ stores and represents the essential rpc data needed for a row displayed on the rpc zpage
+ """
+ method: str
+ received: bool
+ count_minute: int
+ count_hour: int
+ count_total: int
+ avg_latency_minute: datetime.datetime
+ avg_latency_hour: datetime.datetime
+ avg_latency_total: datetime.datetime
+ rpc_rate_minute: float
+ rpc_rate_hour: float
+ rpc_rate_total: float
+ input_rate_minute: float
+ input_rate_hour: float
+ input_rate_total: float
+ output_rate_minute: float
+ output_rate_hour: float
+ output_rate_total: float
+ errors_minute: int
+ errors_hour: int
+ errors_total: int
# class stat_group(NamedTuple):
# """
-# stores and represents the row data (stat_snapshot) as well as which table this would fall under
+# stores and represents the row data (stat_snapshot) as
+# well as which table this would fall under
# on the rpc zpage tables
# :type direction string
@@ -288,7 +443,8 @@ def emitHtml(self, out):
# stores and represents all rpc data across different groups and rows of data
# :type list of class: `~opencensus.zpages.rpc.stat_group`
-# :param statgroups: list of stat groups (received and sent) that together make up a page of stat data
+# :param statgroups: list of stat groups (received and sent) that
+# together make up a page of stat data
# """
# statgroups: List[stat_group]
diff --git a/zpages/rpczpage_handler.py b/zpages/rpczpage_handler.py
new file mode 100644
index 000000000..d0751fe49
--- /dev/null
+++ b/zpages/rpczpage_handler.py
@@ -0,0 +1,498 @@
+import io
+from datetime import time, datetime
+from typing import NamedTuple
+
+from opencensus.stats.view_manager import ViewManager
+
+from style import Style
+from zpage_handler import ZPageHandler
+
+from RpcViewConstants import RPC_CLIENT_ERROR_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_ERROR_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_ERROR_COUNT_VIEW
+from RpcViewConstants import RPC_CLIENT_FINISHED_COUNT_CUMULATIVE_VIEW
+from RpcViewConstants import RPC_CLIENT_FINISHED_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_FINISHED_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_REQUEST_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_REQUEST_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_REQUEST_BYTES_VIEW
+from RpcViewConstants import RPC_CLIENT_REQUEST_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_REQUEST_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_REQUEST_COUNT_VIEW
+from RpcViewConstants import RPC_CLIENT_RESPONSE_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_RESPONSE_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_RESPONSE_BYTES_VIEW
+from RpcViewConstants import RPC_CLIENT_RESPONSE_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_RESPONSE_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_RESPONSE_COUNT_VIEW
+from RpcViewConstants import RPC_CLIENT_ROUNDTRIP_LATENCY_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_ROUNDTRIP_LATENCY_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_ROUNDTRIP_LATENCY_VIEW
+from RpcViewConstants import RPC_CLIENT_STARTED_COUNT_CUMULATIVE_VIEW
+from RpcViewConstants import RPC_CLIENT_STARTED_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_STARTED_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_VIEW
+from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_VIEW
+from RpcViewConstants import RPC_SERVER_ERROR_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_ERROR_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_ERROR_COUNT_VIEW
+from RpcViewConstants import RPC_SERVER_FINISHED_COUNT_CUMULATIVE_VIEW
+from RpcViewConstants import RPC_SERVER_FINISHED_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_FINISHED_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_REQUEST_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_REQUEST_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_REQUEST_BYTES_VIEW
+from RpcViewConstants import RPC_SERVER_REQUEST_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_REQUEST_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_REQUEST_COUNT_VIEW
+from RpcViewConstants import RPC_SERVER_RESPONSE_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_RESPONSE_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_RESPONSE_BYTES_VIEW
+from RpcViewConstants import RPC_SERVER_RESPONSE_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_RESPONSE_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_RESPONSE_COUNT_VIEW
+from RpcViewConstants import RPC_SERVER_SERVER_ELAPSED_TIME_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_SERVER_LATENCY_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_SERVER_LATENCY_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_SERVER_LATENCY_VIEW
+from RpcViewConstants import RPC_SERVER_STARTED_COUNT_CUMULATIVE_VIEW
+from RpcViewConstants import RPC_SERVER_STARTED_COUNT_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_STARTED_COUNT_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_VIEW
+from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_HOUR_VIEW
+from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_MINUTE_VIEW
+from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_VIEW
+
+class RpczZPageHandler():
+
+ manager = ViewManager()
+
+ RPCZ_URL = "/rpcz"
+ SENT = "Sent"
+ RECEIVED = "Received"
+ SECONDS_PER_MINUTE = 60.0
+ SECONDS_PER_HOUR = 3600.0
+ NANOS_PER_SECOND = 1e9
+ BYTES_PER_KB = 1024
+
+ RPC_STATS_TYPES = ("Count", "Avg latency (ms)", "Rate (rpc/s)", "Input (kb/s)", "Output (kb/s)", "Errors")
+
+ CLIENT_RPC_CUMULATIVE_VIEWS = (
+ RPC_CLIENT_ERROR_COUNT_VIEW,
+ RPC_CLIENT_ROUNDTRIP_LATENCY_VIEW,
+ RPC_CLIENT_REQUEST_BYTES_VIEW,
+ RPC_CLIENT_RESPONSE_BYTES_VIEW,
+ RPC_CLIENT_STARTED_COUNT_CUMULATIVE_VIEW,
+ RPC_CLIENT_REQUEST_COUNT_VIEW,
+ RPC_CLIENT_RESPONSE_COUNT_VIEW,
+ RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_VIEW,
+ RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_VIEW,
+ RPC_CLIENT_FINISHED_COUNT_CUMULATIVE_VIEW
+ )
+
+ SERVER_RPC_CUMULATIVE_VIEWS = (
+ RPC_SERVER_ERROR_COUNT_VIEW,
+ RPC_SERVER_SERVER_LATENCY_VIEW,
+ RPC_SERVER_REQUEST_BYTES_VIEW,
+ RPC_SERVER_RESPONSE_BYTES_VIEW,
+ RPC_SERVER_STARTED_COUNT_CUMULATIVE_VIEW,
+ # The last 5 views are not used yet.
+ RPC_SERVER_REQUEST_COUNT_VIEW,
+ RPC_SERVER_RESPONSE_COUNT_VIEW,
+ RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_VIEW,
+ RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_VIEW,
+ RPC_SERVER_FINISHED_COUNT_CUMULATIVE_VIEW
+ )
+
+ CLIENT_RPC_MINUTE_VIEWS = (
+ RPC_CLIENT_ERROR_COUNT_MINUTE_VIEW,
+ RPC_CLIENT_ROUNDTRIP_LATENCY_MINUTE_VIEW,
+ RPC_CLIENT_REQUEST_BYTES_MINUTE_VIEW,
+ RPC_CLIENT_RESPONSE_BYTES_MINUTE_VIEW,
+ RPC_CLIENT_STARTED_COUNT_MINUTE_VIEW,
+ # The last 5 views are not used yet.
+ RPC_CLIENT_REQUEST_COUNT_MINUTE_VIEW,
+ RPC_CLIENT_RESPONSE_COUNT_MINUTE_VIEW,
+ RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_MINUTE_VIEW,
+ RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_MINUTE_VIEW,
+ RPC_CLIENT_FINISHED_COUNT_MINUTE_VIEW
+ )
+
+ SERVER_RPC_MINUTE_VIEWS = (
+ RPC_SERVER_ERROR_COUNT_MINUTE_VIEW,
+ RPC_SERVER_SERVER_LATENCY_MINUTE_VIEW,
+ RPC_SERVER_REQUEST_BYTES_MINUTE_VIEW,
+ RPC_SERVER_RESPONSE_BYTES_MINUTE_VIEW,
+ RPC_SERVER_STARTED_COUNT_MINUTE_VIEW,
+ # The last 5 views are not used yet.
+ RPC_SERVER_REQUEST_COUNT_MINUTE_VIEW,
+ RPC_SERVER_RESPONSE_COUNT_MINUTE_VIEW,
+ RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_MINUTE_VIEW,
+ RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_MINUTE_VIEW,
+ RPC_SERVER_FINISHED_COUNT_MINUTE_VIEW
+ )
+
+ CLIENT_RPC_HOUR_VIEWS = (
+ RPC_CLIENT_ERROR_COUNT_HOUR_VIEW,
+ RPC_CLIENT_ROUNDTRIP_LATENCY_HOUR_VIEW,
+ RPC_CLIENT_REQUEST_BYTES_HOUR_VIEW,
+ RPC_CLIENT_RESPONSE_BYTES_HOUR_VIEW,
+ RPC_CLIENT_STARTED_COUNT_HOUR_VIEW,
+ # The last 5 views are not used yet.
+ RPC_CLIENT_REQUEST_COUNT_HOUR_VIEW,
+ RPC_CLIENT_RESPONSE_COUNT_HOUR_VIEW,
+ RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_HOUR_VIEW,
+ RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_HOUR_VIEW,
+ RPC_CLIENT_FINISHED_COUNT_HOUR_VIEW
+ )
+
+ SERVER_RPC_HOUR_VIEWS = (
+ RPC_SERVER_ERROR_COUNT_HOUR_VIEW,
+ RPC_SERVER_SERVER_LATENCY_HOUR_VIEW,
+ RPC_SERVER_SERVER_ELAPSED_TIME_HOUR_VIEW,
+ RPC_SERVER_REQUEST_BYTES_HOUR_VIEW,
+ RPC_SERVER_RESPONSE_BYTES_HOUR_VIEW,
+ RPC_SERVER_STARTED_COUNT_HOUR_VIEW,
+ # The last 5 views are not used yet.
+ RPC_SERVER_REQUEST_COUNT_HOUR_VIEW,
+ RPC_SERVER_RESPONSE_COUNT_HOUR_VIEW,
+ RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_HOUR_VIEW,
+ RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_HOUR_VIEW,
+ RPC_SERVER_FINISHED_COUNT_HOUR_VIEW
+ )
+
+ def get_url_path(self):
+ return self.RPCZ_URL
+
+ # Here we will need to do HTML writing
+ def emit_style(self, out):
+ print("TODO")
+ out.write("\n")
+
+ def emit_html(self, out):
+ out = io.StringIO()
+ out.write("\n")
+ out.write("\n")
+ out.write(" \n")
+ out.write("RpcZ \n")
+ out.write(" \n")
+ out.write(" \n")
+ out.write(" \n")
+ self.emit_style(out)
+ out.write("\n")
+ out.write("\n")
+ try:
+ emit_html_body(self, out)
+ except:
+ out.write("Errors while generate the HTML page ")
+ out.write("\n")
+ out.write("\n")
+ out.close()
+
+ def emit_html_body(self, out):
+ out.write("")
+ out.write("RPC Stats ")
+ out.write("
")
+ self.emit_summary_table(out, False)
+ self.emit_summary_table(out, True)
+
+ def emit_summary_table(self, out, isReceived):
+ format_str = " "
+ format_str.format(self.RECEIVED if isReceived else self.SENT)
+ out.write(format_str)
+ format_str = ""
+ out.write(format_str)
+ self.emit_summary_table_header(out)
+ snapshots = self.get_stats_snapshots(isReceived)
+ for entry in snapshots: #check what snapshot returns
+ self.emit_summary_table_rows(out, snapshots[entry], entry) #check what entry contrains
+ out.write("
")
+ out.write(" ")
+
+
+ def emit_summary_table_header(self, out):
+ #First line.
+ out.write("")
+ out.write(" ")
+ for rpc_stats_type in self.RPC_STATS_TYPES:
+ formatter = "{} "
+ to_print = formatter.format(rpc_stats_type)
+ out.write(to_print)
+ out.write(" ")
+
+ #Second line.
+ out.write("")
+ out.write("Method \n")
+ out.write(" ")
+ for index in range(0, len(self.RPC_STATS_TYPES)):
+ out.write("Min. \n")
+ out.write("Hr. \n")
+ out.write("Tot. ")
+
+
+ def emit_summary_table_rows(self, out, snapshot, method):
+ out.write(" ")
+ to_print = "{} "
+ out.write(to_print.format(method))
+ out.write(" ")
+ to_print = "{} "
+ out.write(to_print.format(snapshot.countLastMinute))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.countLastHour))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.countTotal))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.avgLatencyLastMinute))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.avgLatencyLastHour))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.avgLatencyTotal))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.rpcRateLastMinute))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.rpcRateLastHour))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.rpcRateTotal))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.inputRateLastMinute))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.inputRateLastHour))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.inputRateTotal))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.outputRateLastMinute))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.outputRateLastHour))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.outputRateTotal))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.errorsLastMinute))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.errorsLastHour))
+ to_print = "{} "
+ out.write(to_print.format(snapshot.errorsTotal))
+ out.write(" ")
+
+ def get_stats_snapshots(self, is_received):
+ stats_map = dict() # Sorted by method name.
+ if is_received:
+ self.get_snapshots(stats_map, self.SERVER_RPC_CUMULATIVE_VIEWS)
+ self.get_snapshots(stats_map, self.SERVER_RPC_MINUTE_VIEWS)
+ self.get_snapshots(stats_map, self.SERVER_RPC_HOUR_VIEWS)
+ else:
+ self.get_snapshots(stats_map, self.CLIENT_RPC_CUMULATIVE_VIEWS)
+ self.get_snapshots(stats_map, self.CLIENT_RPC_MINUTE_VIEWS)
+ self.get_snapshots(stats_map, self.CLIENT_RPC_HOUR_VIEWS)
+ return stats_map
+
+ def get_snapshots(self, data_map, views):
+ for view in views :
+ view_data = self.manager.get_view(view.name)
+ if view_data is None:
+ continue
+ for entry in view_data.tag_value_aggregation_data_map().entrySet: #confused about what type of object tag_value_aggregation_data_map returns
+ tag_values = entry #
+ if len(tag_values) == 1:
+ tag_value = tag_values[0]
+ else:
+ tag_value = tag_values[1]
+ method = "" if tag_value is None else tag_value
+ snapshot = StatSnapshot(data_map.get(method))
+ if (snapshot is None) :
+ snapshot = StatSnapshot()
+ data_map.put(method, snapshot)
+ self.get_stats(snapshot, entry.get_value(), view, view_data.get_window_data())
+
+ # Gets RPC stats by its view definition, and set it to stats snapshot.
+ def get_stats(self, snapshot, data, view, window_data):
+ if view == RPC_CLIENT_ROUNDTRIP_LATENCY_VIEW or view == RPC_SERVER_SERVER_LATENCY_VIEW:
+ snapshot.avg_latency_total = data.mean_data()
+ elif view == RPC_CLIENT_ROUNDTRIP_LATENCY_MINUTE_VIEW or view == RPC_SERVER_SERVER_LATENCY_MINUTE_VIEW:
+ snapshot.avg_latency_minute = data.mean_data()
+ elif view == RPC_CLIENT_ROUNDTRIP_LATENCY_HOUR_VIEW or view == RPC_SERVER_SERVER_LATENCY_HOUR_VIEW:
+ snapshot.avgLatencyLastHour = data.mean_data()
+ elif view == RPC_CLIENT_ERROR_COUNT_VIEW or view == RPC_SERVER_ERROR_COUNT_VIEW:
+ snapshot.errors_total = data.count_data()
+ elif view == RPC_CLIENT_ERROR_COUNT_MINUTE_VIEW or view == RPC_SERVER_ERROR_COUNT_MINUTE_VIEW:
+ snapshot.errors_minute = data.count_data()
+ elif view == RPC_CLIENT_ERROR_COUNT_HOUR_VIEW or view == RPC_SERVER_ERROR_COUNT_HOUR_VIEW:
+ snapshot.errors_hour = data.count_data()
+ elif view == RPC_CLIENT_REQUEST_BYTES_VIEW or view == RPC_SERVER_REQUEST_BYTES_VIEW:
+ snapshot.input_rate_total = data.count_data() \
+ * data.mean_data() \
+ / self.BYTES_PER_KB \
+ / self.get_duration_in_secs(window_data)
+ elif view == RPC_CLIENT_REQUEST_BYTES_MINUTE_VIEW or view == RPC_SERVER_REQUEST_BYTES_MINUTE_VIEW:
+ snapshot.input_rate_minute = data.mean_data() * data.count_data() / self.BYTES_PER_KB / self.SECONDS_PER_MINUTE
+ elif view == RPC_CLIENT_REQUEST_BYTES_HOUR_VIEW or view == RPC_SERVER_REQUEST_BYTES_HOUR_VIEW:
+ snapshot.input_rate_hour = data.mean_data() * data.count_data() / self.BYTES_PER_KB / self.SECONDS_PER_HOUR;
+ elif view == RPC_CLIENT_RESPONSE_BYTES_VIEW or view == RPC_SERVER_RESPONSE_BYTES_VIEW:
+ snapshot.output_rate_total = data.count_data() \
+ * data.mean_data() \
+ / self.BYTES_PER_KB \
+ / self.get_duration_in_secs(window_data)
+ elif view == RPC_CLIENT_RESPONSE_BYTES_MINUTE_VIEW or view == RPC_SERVER_RESPONSE_BYTES_MINUTE_VIEW:
+ snapshot.output_rateminute = data.mean_data() * data.count_data() / self.BYTES_PER_KB / self.SECONDS_PER_MINUTE;
+ elif view == RPC_CLIENT_RESPONSE_BYTES_HOUR_VIEW or view == RPC_SERVER_RESPONSE_BYTES_HOUR_VIEW:
+ snapshot.output_rate_hour = data.mean_data() * data.count_data() / self.BYTES_PER_KB / self.SECONDS_PER_HOUR
+ elif view == RPC_CLIENT_STARTED_COUNT_MINUTE_VIEW or view == RPC_SERVER_STARTED_COUNT_MINUTE_VIEW:
+ snapshot.count_minute = data.count_data()
+ snapshot.rpc_rate_minute = snapshot.count_minute / self.SECONDS_PER_MINUTE
+ elif view == RPC_CLIENT_STARTED_COUNT_HOUR_VIEW or view == RPC_SERVER_STARTED_COUNT_HOUR_VIEW:
+ snapshot.count_hour = data.count_data()
+ snapshot.rpc_rate_hour = snapshot.count_hour / self.SECONDS_PER_HOUR
+ elif view == RPC_CLIENT_STARTED_COUNT_CUMULATIVE_VIEW or view == RPC_SERVER_STARTED_COUNT_CUMULATIVE_VIEW:
+ snapshot.count_total = data.count_data()
+ snapshot.rpc_rate_total = snapshot.count_total \
+ / self.get_duration_in_secs(window_data)
+
+ # Calculates the duration of the given CumulativeData in seconds.
+ def get_duration_in_secs(self, cumulative_data):
+ d1 = datetime.strptime(cumulative_data.end_time, "%Y-%m-%d %H:%M:%S.%f")
+ d2 = datetime.strptime(cumulative_data.start_time, "%Y-%m-%d %H:%M:%S.%f")
+ self.to_double_seconds(d1-d2)
+
+ def to_double_seconds(self, cumulative_data):
+ time.mktime(cumulative_data.timetuple())
+
+ def create(self, manager):
+ return self.__init__(manager)
+
+ def __init__(self, manager):
+ self.manager = manager
+
+
+
+ZPageHandler.register(RpczZPageHandler)
+
+# from flask import Flask, escape, request, render_template
+# from opencensus.stats import view as view_module
+# from opencensus.stats import view_manager as view_manager_module
+
+
+
+# app = Flask(__name__)
+
+# manager = view_manager_module.ViewManager()
+
+# print(sys.path)
+
+
+class StatSnapshot(NamedTuple):
+ """
+ stores and represents the essential rpc data needed for a row displayed on the rpc zpage
+ """
+ method: str
+ received: bool
+ count_minute: int
+ count_hour: int
+ count_total: int
+ avg_latency_minute: datetime.datetime
+ avg_latency_hour: datetime.datetime
+ avg_latency_total: datetime.datetime
+ rpc_rate_minute: float
+ rpc_rate_hour: float
+ rpc_rate_total: float
+ input_rate_minute: float
+ input_rate_hour: float
+ input_rate_total: float
+ output_rate_minute: float
+ output_rate_hour: float
+ output_rate_total: float
+ errors_minute: int
+ errors_hour: int
+ errors_total: int
+
+
+# class stat_group(NamedTuple):
+# """
+# stores and represents the row data (stat_snapshot) as well as which table this would fall under
+# on the rpc zpage tables
+
+# :type direction string
+# :param direction: if the rpc is sent or received
+
+# :type list of class:`~opencensus.zpages.rpc.stat_snapshot`
+# :param snapshots: list of stat_snapshot objects for that specific direction
+
+# """
+# direction: str
+# snapshots: List[stat_snapshot]
+
+
+# class stat_page(NamedTuple):
+# """
+# stores and represents all rpc data across different groups and rows of data
+
+# :type list of class: `~opencensus.zpages.rpc.stat_group`
+# :param statgroups: list of stat groups (received and sent) that together make up a page of stat data
+# """
+# statgroups: List[stat_group]
+
+
+# def get_stats_snapshots(map, views):
+# """
+# processes the ingested stats data and prints it out
+
+# : type map: `~opencensus.zpages.rpc.stat_snapshot` todo replace
+# : param map: todo
+
+# : type views: todo
+# : param view: todo
+# """
+# for view in views :
+# view_data = manager.get_view(manager,view.name)
+# if view_data is None:
+# continue
+# for entry in view_data.tag_value_aggregation_data_map():
+# tag_values = entry # Entry, AggregationData> entry
+# # if len(tag_values):
+# #
+# #
+# # old
+# # for key in view_data.tag_value_aggregation_data_map(view_data).keys():
+# # method = "" if key is None else key.asString()
+# # snapshot = stat_snapshot(map.get(method))
+# # if (snapshot is None) :
+# # snapshot = stat_snapshot()
+# # map.put(method, snapshot)
+
+# # getStats(snapshot, entry.getValue(), view, view_data.getWindowData())
+
+
+# @app.route('/', methods=['GET'])
+# def main():
+# direction_dummy = "Sent"
+# test_row = stat_snapshot(method='api_call1()',
+# received=False,
+# countMinute=1,
+# countHour=2,
+# countTotal=3,
+# avgLatencyMinute='2020-02-18 23:46:31.243168',
+# avgLatencyHour='2020-02-18 23:46:31.243168',
+# avgLatencyTotal='2020-02-18 23:46:31.243168',
+# rpcRateMinute=1.1,
+# rpcRateHour=1.2,
+# rpcRateTotal=1.3,
+# inputRateMinute=2.1,
+# inputRateHour=2.2,
+# inputRateTotal=2.3,
+# outputRateMinute=3.1,
+# outputRateHour=3.2,
+# outputRateTotal=3.3,
+# errorsMinute=4,
+# errorsHour=5,
+# errorsTotal=6)
+# return render_template("index.html", Direction=direction_dummy, obj=test_row)
+
+
+# if __name__ == '__main__':
+# app.run(debug=True)
From ad58f838bd5476123343a83254bae47e43200850 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Fri, 6 Mar 2020 09:46:19 -0800
Subject: [PATCH 25/66] added zpage_tester code, but it doesn't work and not
all imports are possible
---
opencensus/grpc/rpc_constants.py | 0
opencensus/zpages/zpage_tester.py | 105 +++++++++++++++++++++++++++---
2 files changed, 96 insertions(+), 9 deletions(-)
create mode 100644 opencensus/grpc/rpc_constants.py
diff --git a/opencensus/grpc/rpc_constants.py b/opencensus/grpc/rpc_constants.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/opencensus/zpages/zpage_tester.py b/opencensus/zpages/zpage_tester.py
index 2b2995a59..515a1daad 100644
--- a/opencensus/zpages/zpage_tester.py
+++ b/opencensus/zpages/zpage_tester.py
@@ -1,16 +1,68 @@
-from opencensus.stats import view_manager as view_manager_module
-
#Tags.java, Tagger.java, TagValue.java
from opencensus.tags import tag_value as tag_value_module
from opencensus.stats import stats
from opencensus.trace import tracer
from opencensus.tags import tag
from opencensus.tags import tag_value
+from opencensus.tags import tag_key
from opencensus.zpages import zpage_handlers
+from opencensus.stats import measurement_map
+from opencensus.stats import stats_recorder
+
+
+"""
+these classes are not present within Python
+"""
+# import io.opencensus.tags.Tagger;
+# import io.opencensus.trace.SpanBuilder;
+# import io.opencensus.trace.Tracing;
+# from io.opencensus.common.Scope import scope
+
+"""
+this is present within Python but the code is under opencensus.trace.samplers.__init__.py
+and I'm not sure if you can import a __init__.py module like that
+"""
+# import io.opencensus.trace.samplers.Samplers
+
+"""
+constants for rpc measurements
+todo: move to other file with just these constants or use dict with Tag_Key objects
+and then import with similar statements:
+
+import io.opencensus.contrib.grpc.metrics.RpcMeasureConstants;
+import io.opencensus.contrib.grpc.metrics.RpcViews;
+"""
+
+# client measurements
+GRPC_CLIENT_STARTED_RPCS = tag_key("client/started_rpcs")
+RPC_CLIENT_FINISHED_COUNT = tag_key("client/finished_count")
+GRPC_CLIENT_ROUNDTRIP_LATENCY = tag_key("client/roundtrip_latency")
+GRPC_CLIENT_SENT_MESSAGES_PER_RPC = tag_key("client/sent_messages_per_rpc")
+GRPC_CLIENT_RECEIVED_MESSAGES_PER_RPC = tag_key("client/received_messages_per_rpc")
+GRPC_CLIENT_SENT_BYTES_PER_RPC = tag_key("client/sent_bytes_per_rpc")
+GRPC_CLIENT_RECEIVED_BYTES_PER_RPC = tag_key("client/received_bytes_per_rpc")
+RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES = tag_key("client/uncompressed_request_bytes")
+RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES = tag_key("client/uncompressed_response_bytes")
+
+#server measurements
+GRPC_SERVER_STARTED_RPCS = tag_key("server/started_rpcs")
+RPC_SERVER_FINISHED_COUNT = tag_key("server/finished_count")
+GRPC_SERVER_SERVER_LATENCY = tag_key("server/server_latency")
+GRPC_SERVER_RECEIVED_MESSAGES_PER_RPC = tag_key("server/received_messages_per_rpc")
+GRPC_SERVER_SENT_MESSAGES_PER_RPC = tag_key("server/sent_messages_per_rpc")
+GRPC_SERVER_RECEIVED_BYTES_PER_RPC = tag_key("server/uncompressed_request_bytes")
+GRPC_SERVER_SENT_BYTES_PER_RPC = tag_key("server/sent_bytes_per_rpc")
+RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES = tag_key("server/uncompressed_request_bytes")
+RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES = tag_key("server/uncompressed_response_bytes")
+
+
class ZPage_Tester():
+ """
+ class used to represent the application that sends data over to the zpagehandler classes
+ """
- # tagger = tag.getTagger(); #of type Tagger in java todo
+ # tagger = tag.getTagger(); #of type Tagger in java todo: create this class?
tracer = tracer.tracer #of type Tracer
statsRecorder = stats.stats_recorder #of type StatsRecorder
@@ -18,17 +70,52 @@ class ZPage_Tester():
METHOD = tag_value("ExampleMethod")
def __init__(self):
- # no body, does nothing
+ pass
- def record_example_data():
- pass
+ def record_example_data(self):
+ Tracing.getExportComponent().getSampledSpanStore().registerSpanNamesForCollection(Collections.singletonList(SPAN_NAME));
+ #use old rpc constants to get interval stats
+ RpcViews.registerAllViews();
+
+ #try to create the scope
+ try:
+ spanBuilder = tracer.spanbuilder(SPAN_NAME).setRecordEvents(true).setSampler(Sampler.alwaysSample())
+ except:
+ print("some error happened")
+ else:
+ tracer.current_span() #or maybe tracer.current_span().add_attribute_to_current_span() last one is in tracer
+ tracer.span().add_annotation("Starts recording")
+
+ measure_map = stats_recorder.new_measurement_map()
+ measure_map[GRPC_CLIENT_STARTED_RPCS] = 1
+ measure_map[RPC_CLIENT_FINISHED_COUNT] = 1
+ measure_map[GRPC_CLIENT_ROUNDTRIP_LATENCY] = 1.0
+ measure_map[GRPC_SERVER_RECEIVED_MESSAGES_PER_RPC] = 1
+ measure_map[GRPC_CLIENT_RECEIVED_MESSAGES_PER_RPC] = 1
+ measure_map[GRPC_CLIENT_SENT_BYTES_PER_RPC] = 1e5
+ measure_map[GRPC_CLIENT_RECEIVED_BYTES_PER_RPC] = 1e5
+ measure_map[RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES] = 1e5
+ measure_map[RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES] = 1e5
+ # server measurements
+ measure_map[GRPC_SERVER_STARTED_RPCS] = 1
+ measure_map[RPC_SERVER_FINISHED_COUNT] = 1
+ measure_map[GRPC_SERVER_SERVER_LATENCY] = 1.0
+ measure_map[GRPC_SERVER_RECEIVED_MESSAGES_PER_RPC] = 1
+ measure_map[GRPC_SERVER_SENT_MESSAGES_PER_RPC] = 1
+ measure_map[GRPC_SERVER_RECEIVED_BYTES_PER_RPC] = 1e5
+ measure_map[GRPC_SERVER_SENT_BYTES_PER_RPC] = 1e5
+ measure_map[RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES] = 1e5
+ measure_map[RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES] = 1e5
+
+ measure_map.record(tagger) #don't have a tagger object
+
+ tracer.span().add_annotation("Finish recording")
+
- def main(self):
- record_example_data()
if __name__ == '__main__':
- zpage_Handlers.start_http_server_and_register_all(8080)
+ zpage_handlers.start_http_server_and_register_all(8080)
ZPage_Tester.record_example_data()
From 5fbcc7868f3d00c4221bc944bba7b0eb11bc72a2 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Fri, 6 Mar 2020 09:47:59 -0800
Subject: [PATCH 26/66] added link to the file we're modeling from
---
opencensus/zpages/zpage_tester.py | 3 +++
1 file changed, 3 insertions(+)
diff --git a/opencensus/zpages/zpage_tester.py b/opencensus/zpages/zpage_tester.py
index 515a1daad..9229b1819 100644
--- a/opencensus/zpages/zpage_tester.py
+++ b/opencensus/zpages/zpage_tester.py
@@ -60,6 +60,9 @@
class ZPage_Tester():
"""
class used to represent the application that sends data over to the zpagehandler classes
+
+ this is modeled after the java ZPageTester.java file:
+ https://github.com/census-instrumentation/opencensus-java/blob/660e8f375bb483a3eb817940b3aa8534f86da314/examples/src/main/java/io/opencensus/examples/zpages/ZPagesTester.java
"""
# tagger = tag.getTagger(); #of type Tagger in java todo: create this class?
From de78359ea5415454ed93180b4fffb18f8383edc9 Mon Sep 17 00:00:00 2001
From: Gaven Kerr
Date: Fri, 6 Mar 2020 15:19:55 -0500
Subject: [PATCH 27/66] added line in tester file and removed unnecessary
folder
---
opencensus/zpages/zpage_tester.py | 1 +
zpages/rpczpage_handler.py | 498 ------------------------------
2 files changed, 1 insertion(+), 498 deletions(-)
delete mode 100644 zpages/rpczpage_handler.py
diff --git a/opencensus/zpages/zpage_tester.py b/opencensus/zpages/zpage_tester.py
index 9229b1819..048c90053 100644
--- a/opencensus/zpages/zpage_tester.py
+++ b/opencensus/zpages/zpage_tester.py
@@ -3,6 +3,7 @@
from opencensus.stats import stats
from opencensus.trace import tracer
from opencensus.tags import tag
+from opencensus.tags import tagger
from opencensus.tags import tag_value
from opencensus.tags import tag_key
from opencensus.zpages import zpage_handlers
diff --git a/zpages/rpczpage_handler.py b/zpages/rpczpage_handler.py
deleted file mode 100644
index d0751fe49..000000000
--- a/zpages/rpczpage_handler.py
+++ /dev/null
@@ -1,498 +0,0 @@
-import io
-from datetime import time, datetime
-from typing import NamedTuple
-
-from opencensus.stats.view_manager import ViewManager
-
-from style import Style
-from zpage_handler import ZPageHandler
-
-from RpcViewConstants import RPC_CLIENT_ERROR_COUNT_HOUR_VIEW
-from RpcViewConstants import RPC_CLIENT_ERROR_COUNT_MINUTE_VIEW
-from RpcViewConstants import RPC_CLIENT_ERROR_COUNT_VIEW
-from RpcViewConstants import RPC_CLIENT_FINISHED_COUNT_CUMULATIVE_VIEW
-from RpcViewConstants import RPC_CLIENT_FINISHED_COUNT_HOUR_VIEW
-from RpcViewConstants import RPC_CLIENT_FINISHED_COUNT_MINUTE_VIEW
-from RpcViewConstants import RPC_CLIENT_REQUEST_BYTES_HOUR_VIEW
-from RpcViewConstants import RPC_CLIENT_REQUEST_BYTES_MINUTE_VIEW
-from RpcViewConstants import RPC_CLIENT_REQUEST_BYTES_VIEW
-from RpcViewConstants import RPC_CLIENT_REQUEST_COUNT_HOUR_VIEW
-from RpcViewConstants import RPC_CLIENT_REQUEST_COUNT_MINUTE_VIEW
-from RpcViewConstants import RPC_CLIENT_REQUEST_COUNT_VIEW
-from RpcViewConstants import RPC_CLIENT_RESPONSE_BYTES_HOUR_VIEW
-from RpcViewConstants import RPC_CLIENT_RESPONSE_BYTES_MINUTE_VIEW
-from RpcViewConstants import RPC_CLIENT_RESPONSE_BYTES_VIEW
-from RpcViewConstants import RPC_CLIENT_RESPONSE_COUNT_HOUR_VIEW
-from RpcViewConstants import RPC_CLIENT_RESPONSE_COUNT_MINUTE_VIEW
-from RpcViewConstants import RPC_CLIENT_RESPONSE_COUNT_VIEW
-from RpcViewConstants import RPC_CLIENT_ROUNDTRIP_LATENCY_HOUR_VIEW
-from RpcViewConstants import RPC_CLIENT_ROUNDTRIP_LATENCY_MINUTE_VIEW
-from RpcViewConstants import RPC_CLIENT_ROUNDTRIP_LATENCY_VIEW
-from RpcViewConstants import RPC_CLIENT_STARTED_COUNT_CUMULATIVE_VIEW
-from RpcViewConstants import RPC_CLIENT_STARTED_COUNT_HOUR_VIEW
-from RpcViewConstants import RPC_CLIENT_STARTED_COUNT_MINUTE_VIEW
-from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_HOUR_VIEW
-from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_MINUTE_VIEW
-from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_VIEW
-from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_HOUR_VIEW
-from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_MINUTE_VIEW
-from RpcViewConstants import RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_VIEW
-from RpcViewConstants import RPC_SERVER_ERROR_COUNT_HOUR_VIEW
-from RpcViewConstants import RPC_SERVER_ERROR_COUNT_MINUTE_VIEW
-from RpcViewConstants import RPC_SERVER_ERROR_COUNT_VIEW
-from RpcViewConstants import RPC_SERVER_FINISHED_COUNT_CUMULATIVE_VIEW
-from RpcViewConstants import RPC_SERVER_FINISHED_COUNT_HOUR_VIEW
-from RpcViewConstants import RPC_SERVER_FINISHED_COUNT_MINUTE_VIEW
-from RpcViewConstants import RPC_SERVER_REQUEST_BYTES_HOUR_VIEW
-from RpcViewConstants import RPC_SERVER_REQUEST_BYTES_MINUTE_VIEW
-from RpcViewConstants import RPC_SERVER_REQUEST_BYTES_VIEW
-from RpcViewConstants import RPC_SERVER_REQUEST_COUNT_HOUR_VIEW
-from RpcViewConstants import RPC_SERVER_REQUEST_COUNT_MINUTE_VIEW
-from RpcViewConstants import RPC_SERVER_REQUEST_COUNT_VIEW
-from RpcViewConstants import RPC_SERVER_RESPONSE_BYTES_HOUR_VIEW
-from RpcViewConstants import RPC_SERVER_RESPONSE_BYTES_MINUTE_VIEW
-from RpcViewConstants import RPC_SERVER_RESPONSE_BYTES_VIEW
-from RpcViewConstants import RPC_SERVER_RESPONSE_COUNT_HOUR_VIEW
-from RpcViewConstants import RPC_SERVER_RESPONSE_COUNT_MINUTE_VIEW
-from RpcViewConstants import RPC_SERVER_RESPONSE_COUNT_VIEW
-from RpcViewConstants import RPC_SERVER_SERVER_ELAPSED_TIME_HOUR_VIEW
-from RpcViewConstants import RPC_SERVER_SERVER_LATENCY_HOUR_VIEW
-from RpcViewConstants import RPC_SERVER_SERVER_LATENCY_MINUTE_VIEW
-from RpcViewConstants import RPC_SERVER_SERVER_LATENCY_VIEW
-from RpcViewConstants import RPC_SERVER_STARTED_COUNT_CUMULATIVE_VIEW
-from RpcViewConstants import RPC_SERVER_STARTED_COUNT_HOUR_VIEW
-from RpcViewConstants import RPC_SERVER_STARTED_COUNT_MINUTE_VIEW
-from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_HOUR_VIEW
-from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_MINUTE_VIEW
-from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_VIEW
-from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_HOUR_VIEW
-from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_MINUTE_VIEW
-from RpcViewConstants import RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_VIEW
-
-class RpczZPageHandler():
-
- manager = ViewManager()
-
- RPCZ_URL = "/rpcz"
- SENT = "Sent"
- RECEIVED = "Received"
- SECONDS_PER_MINUTE = 60.0
- SECONDS_PER_HOUR = 3600.0
- NANOS_PER_SECOND = 1e9
- BYTES_PER_KB = 1024
-
- RPC_STATS_TYPES = ("Count", "Avg latency (ms)", "Rate (rpc/s)", "Input (kb/s)", "Output (kb/s)", "Errors")
-
- CLIENT_RPC_CUMULATIVE_VIEWS = (
- RPC_CLIENT_ERROR_COUNT_VIEW,
- RPC_CLIENT_ROUNDTRIP_LATENCY_VIEW,
- RPC_CLIENT_REQUEST_BYTES_VIEW,
- RPC_CLIENT_RESPONSE_BYTES_VIEW,
- RPC_CLIENT_STARTED_COUNT_CUMULATIVE_VIEW,
- RPC_CLIENT_REQUEST_COUNT_VIEW,
- RPC_CLIENT_RESPONSE_COUNT_VIEW,
- RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_VIEW,
- RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_VIEW,
- RPC_CLIENT_FINISHED_COUNT_CUMULATIVE_VIEW
- )
-
- SERVER_RPC_CUMULATIVE_VIEWS = (
- RPC_SERVER_ERROR_COUNT_VIEW,
- RPC_SERVER_SERVER_LATENCY_VIEW,
- RPC_SERVER_REQUEST_BYTES_VIEW,
- RPC_SERVER_RESPONSE_BYTES_VIEW,
- RPC_SERVER_STARTED_COUNT_CUMULATIVE_VIEW,
- # The last 5 views are not used yet.
- RPC_SERVER_REQUEST_COUNT_VIEW,
- RPC_SERVER_RESPONSE_COUNT_VIEW,
- RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_VIEW,
- RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_VIEW,
- RPC_SERVER_FINISHED_COUNT_CUMULATIVE_VIEW
- )
-
- CLIENT_RPC_MINUTE_VIEWS = (
- RPC_CLIENT_ERROR_COUNT_MINUTE_VIEW,
- RPC_CLIENT_ROUNDTRIP_LATENCY_MINUTE_VIEW,
- RPC_CLIENT_REQUEST_BYTES_MINUTE_VIEW,
- RPC_CLIENT_RESPONSE_BYTES_MINUTE_VIEW,
- RPC_CLIENT_STARTED_COUNT_MINUTE_VIEW,
- # The last 5 views are not used yet.
- RPC_CLIENT_REQUEST_COUNT_MINUTE_VIEW,
- RPC_CLIENT_RESPONSE_COUNT_MINUTE_VIEW,
- RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_MINUTE_VIEW,
- RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_MINUTE_VIEW,
- RPC_CLIENT_FINISHED_COUNT_MINUTE_VIEW
- )
-
- SERVER_RPC_MINUTE_VIEWS = (
- RPC_SERVER_ERROR_COUNT_MINUTE_VIEW,
- RPC_SERVER_SERVER_LATENCY_MINUTE_VIEW,
- RPC_SERVER_REQUEST_BYTES_MINUTE_VIEW,
- RPC_SERVER_RESPONSE_BYTES_MINUTE_VIEW,
- RPC_SERVER_STARTED_COUNT_MINUTE_VIEW,
- # The last 5 views are not used yet.
- RPC_SERVER_REQUEST_COUNT_MINUTE_VIEW,
- RPC_SERVER_RESPONSE_COUNT_MINUTE_VIEW,
- RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_MINUTE_VIEW,
- RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_MINUTE_VIEW,
- RPC_SERVER_FINISHED_COUNT_MINUTE_VIEW
- )
-
- CLIENT_RPC_HOUR_VIEWS = (
- RPC_CLIENT_ERROR_COUNT_HOUR_VIEW,
- RPC_CLIENT_ROUNDTRIP_LATENCY_HOUR_VIEW,
- RPC_CLIENT_REQUEST_BYTES_HOUR_VIEW,
- RPC_CLIENT_RESPONSE_BYTES_HOUR_VIEW,
- RPC_CLIENT_STARTED_COUNT_HOUR_VIEW,
- # The last 5 views are not used yet.
- RPC_CLIENT_REQUEST_COUNT_HOUR_VIEW,
- RPC_CLIENT_RESPONSE_COUNT_HOUR_VIEW,
- RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES_HOUR_VIEW,
- RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES_HOUR_VIEW,
- RPC_CLIENT_FINISHED_COUNT_HOUR_VIEW
- )
-
- SERVER_RPC_HOUR_VIEWS = (
- RPC_SERVER_ERROR_COUNT_HOUR_VIEW,
- RPC_SERVER_SERVER_LATENCY_HOUR_VIEW,
- RPC_SERVER_SERVER_ELAPSED_TIME_HOUR_VIEW,
- RPC_SERVER_REQUEST_BYTES_HOUR_VIEW,
- RPC_SERVER_RESPONSE_BYTES_HOUR_VIEW,
- RPC_SERVER_STARTED_COUNT_HOUR_VIEW,
- # The last 5 views are not used yet.
- RPC_SERVER_REQUEST_COUNT_HOUR_VIEW,
- RPC_SERVER_RESPONSE_COUNT_HOUR_VIEW,
- RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES_HOUR_VIEW,
- RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES_HOUR_VIEW,
- RPC_SERVER_FINISHED_COUNT_HOUR_VIEW
- )
-
- def get_url_path(self):
- return self.RPCZ_URL
-
- # Here we will need to do HTML writing
- def emit_style(self, out):
- print("TODO")
- out.write("\n")
-
- def emit_html(self, out):
- out = io.StringIO()
- out.write("\n")
- out.write("\n")
- out.write(" \n")
- out.write("RpcZ \n")
- out.write(" \n")
- out.write(" \n")
- out.write(" \n")
- self.emit_style(out)
- out.write("\n")
- out.write("\n")
- try:
- emit_html_body(self, out)
- except:
- out.write("Errors while generate the HTML page ")
- out.write("\n")
- out.write("\n")
- out.close()
-
- def emit_html_body(self, out):
- out.write("")
- out.write("RPC Stats ")
- out.write("
")
- self.emit_summary_table(out, False)
- self.emit_summary_table(out, True)
-
- def emit_summary_table(self, out, isReceived):
- format_str = " "
- format_str.format(self.RECEIVED if isReceived else self.SENT)
- out.write(format_str)
- format_str = ""
- out.write(format_str)
- self.emit_summary_table_header(out)
- snapshots = self.get_stats_snapshots(isReceived)
- for entry in snapshots: #check what snapshot returns
- self.emit_summary_table_rows(out, snapshots[entry], entry) #check what entry contrains
- out.write("
")
- out.write(" ")
-
-
- def emit_summary_table_header(self, out):
- #First line.
- out.write("")
- out.write(" ")
- for rpc_stats_type in self.RPC_STATS_TYPES:
- formatter = "{} "
- to_print = formatter.format(rpc_stats_type)
- out.write(to_print)
- out.write(" ")
-
- #Second line.
- out.write("")
- out.write("Method \n")
- out.write(" ")
- for index in range(0, len(self.RPC_STATS_TYPES)):
- out.write("Min. \n")
- out.write("Hr. \n")
- out.write("Tot. ")
-
-
- def emit_summary_table_rows(self, out, snapshot, method):
- out.write(" ")
- to_print = "{} "
- out.write(to_print.format(method))
- out.write(" ")
- to_print = "{} "
- out.write(to_print.format(snapshot.countLastMinute))
- to_print = "{} "
- out.write(to_print.format(snapshot.countLastHour))
- to_print = "{} "
- out.write(to_print.format(snapshot.countTotal))
- to_print = "{} "
- out.write(to_print.format(snapshot.avgLatencyLastMinute))
- to_print = "{} "
- out.write(to_print.format(snapshot.avgLatencyLastHour))
- to_print = "{} "
- out.write(to_print.format(snapshot.avgLatencyTotal))
- to_print = "{} "
- out.write(to_print.format(snapshot.rpcRateLastMinute))
- to_print = "{} "
- out.write(to_print.format(snapshot.rpcRateLastHour))
- to_print = "{} "
- out.write(to_print.format(snapshot.rpcRateTotal))
- to_print = "{} "
- out.write(to_print.format(snapshot.inputRateLastMinute))
- to_print = "{} "
- out.write(to_print.format(snapshot.inputRateLastHour))
- to_print = "{} "
- out.write(to_print.format(snapshot.inputRateTotal))
- to_print = "{} "
- out.write(to_print.format(snapshot.outputRateLastMinute))
- to_print = "{} "
- out.write(to_print.format(snapshot.outputRateLastHour))
- to_print = "{} "
- out.write(to_print.format(snapshot.outputRateTotal))
- to_print = "{} "
- out.write(to_print.format(snapshot.errorsLastMinute))
- to_print = "{} "
- out.write(to_print.format(snapshot.errorsLastHour))
- to_print = "{} "
- out.write(to_print.format(snapshot.errorsTotal))
- out.write(" ")
-
- def get_stats_snapshots(self, is_received):
- stats_map = dict() # Sorted by method name.
- if is_received:
- self.get_snapshots(stats_map, self.SERVER_RPC_CUMULATIVE_VIEWS)
- self.get_snapshots(stats_map, self.SERVER_RPC_MINUTE_VIEWS)
- self.get_snapshots(stats_map, self.SERVER_RPC_HOUR_VIEWS)
- else:
- self.get_snapshots(stats_map, self.CLIENT_RPC_CUMULATIVE_VIEWS)
- self.get_snapshots(stats_map, self.CLIENT_RPC_MINUTE_VIEWS)
- self.get_snapshots(stats_map, self.CLIENT_RPC_HOUR_VIEWS)
- return stats_map
-
- def get_snapshots(self, data_map, views):
- for view in views :
- view_data = self.manager.get_view(view.name)
- if view_data is None:
- continue
- for entry in view_data.tag_value_aggregation_data_map().entrySet: #confused about what type of object tag_value_aggregation_data_map returns
- tag_values = entry #
- if len(tag_values) == 1:
- tag_value = tag_values[0]
- else:
- tag_value = tag_values[1]
- method = "" if tag_value is None else tag_value
- snapshot = StatSnapshot(data_map.get(method))
- if (snapshot is None) :
- snapshot = StatSnapshot()
- data_map.put(method, snapshot)
- self.get_stats(snapshot, entry.get_value(), view, view_data.get_window_data())
-
- # Gets RPC stats by its view definition, and set it to stats snapshot.
- def get_stats(self, snapshot, data, view, window_data):
- if view == RPC_CLIENT_ROUNDTRIP_LATENCY_VIEW or view == RPC_SERVER_SERVER_LATENCY_VIEW:
- snapshot.avg_latency_total = data.mean_data()
- elif view == RPC_CLIENT_ROUNDTRIP_LATENCY_MINUTE_VIEW or view == RPC_SERVER_SERVER_LATENCY_MINUTE_VIEW:
- snapshot.avg_latency_minute = data.mean_data()
- elif view == RPC_CLIENT_ROUNDTRIP_LATENCY_HOUR_VIEW or view == RPC_SERVER_SERVER_LATENCY_HOUR_VIEW:
- snapshot.avgLatencyLastHour = data.mean_data()
- elif view == RPC_CLIENT_ERROR_COUNT_VIEW or view == RPC_SERVER_ERROR_COUNT_VIEW:
- snapshot.errors_total = data.count_data()
- elif view == RPC_CLIENT_ERROR_COUNT_MINUTE_VIEW or view == RPC_SERVER_ERROR_COUNT_MINUTE_VIEW:
- snapshot.errors_minute = data.count_data()
- elif view == RPC_CLIENT_ERROR_COUNT_HOUR_VIEW or view == RPC_SERVER_ERROR_COUNT_HOUR_VIEW:
- snapshot.errors_hour = data.count_data()
- elif view == RPC_CLIENT_REQUEST_BYTES_VIEW or view == RPC_SERVER_REQUEST_BYTES_VIEW:
- snapshot.input_rate_total = data.count_data() \
- * data.mean_data() \
- / self.BYTES_PER_KB \
- / self.get_duration_in_secs(window_data)
- elif view == RPC_CLIENT_REQUEST_BYTES_MINUTE_VIEW or view == RPC_SERVER_REQUEST_BYTES_MINUTE_VIEW:
- snapshot.input_rate_minute = data.mean_data() * data.count_data() / self.BYTES_PER_KB / self.SECONDS_PER_MINUTE
- elif view == RPC_CLIENT_REQUEST_BYTES_HOUR_VIEW or view == RPC_SERVER_REQUEST_BYTES_HOUR_VIEW:
- snapshot.input_rate_hour = data.mean_data() * data.count_data() / self.BYTES_PER_KB / self.SECONDS_PER_HOUR;
- elif view == RPC_CLIENT_RESPONSE_BYTES_VIEW or view == RPC_SERVER_RESPONSE_BYTES_VIEW:
- snapshot.output_rate_total = data.count_data() \
- * data.mean_data() \
- / self.BYTES_PER_KB \
- / self.get_duration_in_secs(window_data)
- elif view == RPC_CLIENT_RESPONSE_BYTES_MINUTE_VIEW or view == RPC_SERVER_RESPONSE_BYTES_MINUTE_VIEW:
- snapshot.output_rateminute = data.mean_data() * data.count_data() / self.BYTES_PER_KB / self.SECONDS_PER_MINUTE;
- elif view == RPC_CLIENT_RESPONSE_BYTES_HOUR_VIEW or view == RPC_SERVER_RESPONSE_BYTES_HOUR_VIEW:
- snapshot.output_rate_hour = data.mean_data() * data.count_data() / self.BYTES_PER_KB / self.SECONDS_PER_HOUR
- elif view == RPC_CLIENT_STARTED_COUNT_MINUTE_VIEW or view == RPC_SERVER_STARTED_COUNT_MINUTE_VIEW:
- snapshot.count_minute = data.count_data()
- snapshot.rpc_rate_minute = snapshot.count_minute / self.SECONDS_PER_MINUTE
- elif view == RPC_CLIENT_STARTED_COUNT_HOUR_VIEW or view == RPC_SERVER_STARTED_COUNT_HOUR_VIEW:
- snapshot.count_hour = data.count_data()
- snapshot.rpc_rate_hour = snapshot.count_hour / self.SECONDS_PER_HOUR
- elif view == RPC_CLIENT_STARTED_COUNT_CUMULATIVE_VIEW or view == RPC_SERVER_STARTED_COUNT_CUMULATIVE_VIEW:
- snapshot.count_total = data.count_data()
- snapshot.rpc_rate_total = snapshot.count_total \
- / self.get_duration_in_secs(window_data)
-
- # Calculates the duration of the given CumulativeData in seconds.
- def get_duration_in_secs(self, cumulative_data):
- d1 = datetime.strptime(cumulative_data.end_time, "%Y-%m-%d %H:%M:%S.%f")
- d2 = datetime.strptime(cumulative_data.start_time, "%Y-%m-%d %H:%M:%S.%f")
- self.to_double_seconds(d1-d2)
-
- def to_double_seconds(self, cumulative_data):
- time.mktime(cumulative_data.timetuple())
-
- def create(self, manager):
- return self.__init__(manager)
-
- def __init__(self, manager):
- self.manager = manager
-
-
-
-ZPageHandler.register(RpczZPageHandler)
-
-# from flask import Flask, escape, request, render_template
-# from opencensus.stats import view as view_module
-# from opencensus.stats import view_manager as view_manager_module
-
-
-
-# app = Flask(__name__)
-
-# manager = view_manager_module.ViewManager()
-
-# print(sys.path)
-
-
-class StatSnapshot(NamedTuple):
- """
- stores and represents the essential rpc data needed for a row displayed on the rpc zpage
- """
- method: str
- received: bool
- count_minute: int
- count_hour: int
- count_total: int
- avg_latency_minute: datetime.datetime
- avg_latency_hour: datetime.datetime
- avg_latency_total: datetime.datetime
- rpc_rate_minute: float
- rpc_rate_hour: float
- rpc_rate_total: float
- input_rate_minute: float
- input_rate_hour: float
- input_rate_total: float
- output_rate_minute: float
- output_rate_hour: float
- output_rate_total: float
- errors_minute: int
- errors_hour: int
- errors_total: int
-
-
-# class stat_group(NamedTuple):
-# """
-# stores and represents the row data (stat_snapshot) as well as which table this would fall under
-# on the rpc zpage tables
-
-# :type direction string
-# :param direction: if the rpc is sent or received
-
-# :type list of class:`~opencensus.zpages.rpc.stat_snapshot`
-# :param snapshots: list of stat_snapshot objects for that specific direction
-
-# """
-# direction: str
-# snapshots: List[stat_snapshot]
-
-
-# class stat_page(NamedTuple):
-# """
-# stores and represents all rpc data across different groups and rows of data
-
-# :type list of class: `~opencensus.zpages.rpc.stat_group`
-# :param statgroups: list of stat groups (received and sent) that together make up a page of stat data
-# """
-# statgroups: List[stat_group]
-
-
-# def get_stats_snapshots(map, views):
-# """
-# processes the ingested stats data and prints it out
-
-# : type map: `~opencensus.zpages.rpc.stat_snapshot` todo replace
-# : param map: todo
-
-# : type views: todo
-# : param view: todo
-# """
-# for view in views :
-# view_data = manager.get_view(manager,view.name)
-# if view_data is None:
-# continue
-# for entry in view_data.tag_value_aggregation_data_map():
-# tag_values = entry # Entry, AggregationData> entry
-# # if len(tag_values):
-# #
-# #
-# # old
-# # for key in view_data.tag_value_aggregation_data_map(view_data).keys():
-# # method = "" if key is None else key.asString()
-# # snapshot = stat_snapshot(map.get(method))
-# # if (snapshot is None) :
-# # snapshot = stat_snapshot()
-# # map.put(method, snapshot)
-
-# # getStats(snapshot, entry.getValue(), view, view_data.getWindowData())
-
-
-# @app.route('/', methods=['GET'])
-# def main():
-# direction_dummy = "Sent"
-# test_row = stat_snapshot(method='api_call1()',
-# received=False,
-# countMinute=1,
-# countHour=2,
-# countTotal=3,
-# avgLatencyMinute='2020-02-18 23:46:31.243168',
-# avgLatencyHour='2020-02-18 23:46:31.243168',
-# avgLatencyTotal='2020-02-18 23:46:31.243168',
-# rpcRateMinute=1.1,
-# rpcRateHour=1.2,
-# rpcRateTotal=1.3,
-# inputRateMinute=2.1,
-# inputRateHour=2.2,
-# inputRateTotal=2.3,
-# outputRateMinute=3.1,
-# outputRateHour=3.2,
-# outputRateTotal=3.3,
-# errorsMinute=4,
-# errorsHour=5,
-# errorsTotal=6)
-# return render_template("index.html", Direction=direction_dummy, obj=test_row)
-
-
-# if __name__ == '__main__':
-# app.run(debug=True)
From 54ca2e5375164815cbfcd14bb7d326e8ab22c3ac Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Fri, 27 Mar 2020 15:36:00 -0400
Subject: [PATCH 28/66] wrote file exporter code version
---
opencensus/trace/file_exporter.py | 2 +-
.../zpages/test_application/anam_traces.json | 0
opencensus/zpages/test_application/app.py | 15 +++
.../zpages/test_application/app_example.py | 111 ++++++++++++++++++
opencensus/zpages/test_application/backend.py | 29 +++++
5 files changed, 156 insertions(+), 1 deletion(-)
create mode 100644 opencensus/zpages/test_application/anam_traces.json
create mode 100644 opencensus/zpages/test_application/app_example.py
create mode 100644 opencensus/zpages/test_application/backend.py
diff --git a/opencensus/trace/file_exporter.py b/opencensus/trace/file_exporter.py
index baaeaddfc..fb9c5065c 100644
--- a/opencensus/trace/file_exporter.py
+++ b/opencensus/trace/file_exporter.py
@@ -41,7 +41,7 @@ class FileExporter(base_exporter.Exporter):
"""
def __init__(self, file_name=DEFAULT_FILENAME,
- transport=sync.SyncTransport,
+ transport=sync.AsyncTransport,
file_mode='w+'):
self.file_name = file_name
self.transport = transport(self)
diff --git a/opencensus/zpages/test_application/anam_traces.json b/opencensus/zpages/test_application/anam_traces.json
new file mode 100644
index 000000000..e69de29bb
diff --git a/opencensus/zpages/test_application/app.py b/opencensus/zpages/test_application/app.py
index 5dfe50c1f..fdd2b8066 100644
--- a/opencensus/zpages/test_application/app.py
+++ b/opencensus/zpages/test_application/app.py
@@ -32,6 +32,13 @@
from opencensus.tags import tag_map as tag_map_module
from opencensus.tags import tag_value as tag_value_module
+from opencensus.trace import config_integration
+from opencensus.trace import file_exporter
+from opencensus.trace import tracer as tracer_module
+from opencensus.trace.propagation import google_cloud_format
+from opencensus.trace.samplers import ProbabilitySampler
+
+
# constants within the video example on examples/helloworld/main.py
MIB = 1 << 20
FRONTEND_KEY = tag_key_module.TagKey("my.org/keys/frontend")
@@ -78,6 +85,14 @@ def main():
the spans, and prints out collected data.
"""
+ config_integration.trace_integrations() #fix ['httplib']
+
+ tracer = tracer_module.Tracer(
+ exporter=file_exporter.FileExporter(file_name='traces'),
+ propagator=google_cloud_format.GoogleCloudFormatPropagator(),
+ sampler=ProbabilitySampler(rate=0.5),
+ )
+
stats = stats_module.stats
view_manager = stats.view_manager
stats_recorder = stats.stats_recorder
diff --git a/opencensus/zpages/test_application/app_example.py b/opencensus/zpages/test_application/app_example.py
new file mode 100644
index 000000000..ebecf8b05
--- /dev/null
+++ b/opencensus/zpages/test_application/app_example.py
@@ -0,0 +1,111 @@
+# Copyright 2018, OpenCensus Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+app.py is a test Python application script that calls 3 methods, each of which
+are wrapped around a Tracer.span object that traces that call/request and represents
+that data within a span.
+"""
+
+import random
+import time
+from pprint import pprint
+import requests
+
+from opencensus.trace.samplers import AlwaysOnSampler
+from opencensus.trace.tracer import Tracer
+from opencensus.stats import aggregation as aggregation_module
+from opencensus.stats import measure as measure_module
+from opencensus.stats import stats as stats_module
+from opencensus.stats import view as view_module
+from opencensus.tags import tag_key as tag_key_module
+from opencensus.tags import tag_map as tag_map_module
+from opencensus.tags import tag_value as tag_value_module
+
+from opencensus.trace import config_integration
+from opencensus.trace import file_exporter
+from opencensus.trace import tracer as tracer_module
+from opencensus.trace.propagation import google_cloud_format
+from opencensus.trace.samplers import ProbabilitySampler
+
+
+# constants within the video example on examples/helloworld/main.py
+MIB = 1 << 20
+FRONTEND_KEY = tag_key_module.TagKey("my.org/keys/frontend")
+VIDEO_SIZE_MEASURE = measure_module.MeasureInt(
+ "my.org/measures/video_size", "size of processed videos", "By")
+VIDEO_SIZE_VIEW_NAME = "my.org/views/video_size"
+VIDEO_SIZE_DISTRIBUTION = aggregation_module.DistributionAggregation(
+ [0.0, 16.0 * MIB, 256.0 * MIB])
+VIDEO_SIZE_VIEW = view_module.View(
+ VIDEO_SIZE_VIEW_NAME, "processed video size over time", [FRONTEND_KEY],
+ VIDEO_SIZE_MEASURE, VIDEO_SIZE_DISTRIBUTION)
+
+
+def main():
+ """
+ Initializes the objects required for recording the rpc data, creates
+ the spans, and prints out collected data.
+ """
+
+ config_integration.trace_integrations(['httplib'])
+
+ tracer = tracer_module.Tracer(
+ exporter=file_exporter.FileExporter(file_name='anam_traces.json'),
+ propagator=google_cloud_format.GoogleCloudFormatPropagator(),
+ sampler=ProbabilitySampler(rate=0.5),
+ )
+
+ stats = stats_module.stats
+ view_manager = stats.view_manager
+ stats_recorder = stats.stats_recorder
+ tracer = Tracer(sampler=AlwaysOnSampler())
+
+ # Register view.
+ view_manager.register_view(VIDEO_SIZE_VIEW)
+
+ # Sleep for [0, 10] milliseconds to fake work.
+ time.sleep(random.randint(1, 10) / 1000.0)
+
+ # Process video.
+ with tracer.span(name='span1'):
+ r1 = requests.get('http://localhost:8000/getdata1')
+ # get_data1()
+ with tracer.span(name='span2'):
+ r2 = requests.get('http://localhost:8000/getdata2')
+ with tracer.span(name='span3'):
+ r3 = requests.get('http://localhost:8000/getdata3')
+
+ # Record the processed video size.
+ tag_value = tag_value_module.TagValue("mobile-ios9.3.5")
+ tag_map = tag_map_module.TagMap()
+ tag_map.insert(FRONTEND_KEY, tag_value)
+ measure_map = stats_recorder.new_measurement_map()
+ measure_map.measure_int_put(VIDEO_SIZE_MEASURE, 25 * MIB)
+ measure_map.record(tag_map)
+
+ # Get aggregated stats and print it to console.
+ view_data = view_manager.get_view(VIDEO_SIZE_VIEW_NAME)
+ pprint(vars(view_data))
+ # temp pylint fix: change back to protected member method by adding underscore in front
+ for k, val in view_data.tag_value_aggregation_data_map.items():
+ pprint(k)
+ pprint(vars(val))
+
+ # tracer.exporter.emit(tracer.current_span())
+ tracer.exporter.export()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/opencensus/zpages/test_application/backend.py b/opencensus/zpages/test_application/backend.py
new file mode 100644
index 000000000..dc9feb1d3
--- /dev/null
+++ b/opencensus/zpages/test_application/backend.py
@@ -0,0 +1,29 @@
+from flask import Flask, escape, request, render_template, jsonify
+from flask_cors import CORS
+
+
+app = Flask(__name__)
+CORS(app)
+
+@app.route('/getdata1')
+def getData1():
+ name = "Anam Navied"
+ test_data = {'name': name}
+ return test_data
+
+@app.route('/getdata2')
+def getData2():
+ name = "Gaven Kerr"
+ test_data = {'name': name}
+ return test_data
+
+@app.route('/getdata3')
+def getData3():
+ name = "Aasiyah Feisal"
+ test_data = {'name': name}
+ return test_data
+
+
+
+if __name__ == '__main__':
+ app.run(host='0.0.0.0', port=8000, debug=True)
\ No newline at end of file
From 69b2d68069e14a36553565103ca8a5ccb4c8a346 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Tue, 7 Apr 2020 17:20:05 -0400
Subject: [PATCH 29/66] implementation for RPC measure constants, doesn't have
testing yet
---
opencensus/grpc/measure.py | 24 +++
opencensus/grpc/measure_double.py | 30 ++++
opencensus/grpc/measure_long.py | 30 ++++
opencensus/grpc/rpc_constants.py | 0
opencensus/grpc/rpc_measure_constants.py | 151 ++++++++++++++++++
.../zpages/test_application/app_example.py | 2 +-
6 files changed, 236 insertions(+), 1 deletion(-)
create mode 100644 opencensus/grpc/measure.py
create mode 100644 opencensus/grpc/measure_double.py
create mode 100644 opencensus/grpc/measure_long.py
delete mode 100644 opencensus/grpc/rpc_constants.py
create mode 100644 opencensus/grpc/rpc_measure_constants.py
diff --git a/opencensus/grpc/measure.py b/opencensus/grpc/measure.py
new file mode 100644
index 000000000..6085d65f6
--- /dev/null
+++ b/opencensus/grpc/measure.py
@@ -0,0 +1,24 @@
+
+
+class Measure():
+ """
+ defines Measurement taken by OpenCensus library
+ """
+
+ def __new__(cls):
+ name_max_length = 255
+ error_msg_invalid_name = f"Name should be a ASCII string with a length no greater than {name_max_length} characters."
+ return object.__new__(cls)
+
+ def get_name(self):
+ return
+
+ def get_description(self):
+ return
+
+ def get_unit(self):
+ return
+
+ def create_double(self):
+ return
+
diff --git a/opencensus/grpc/measure_double.py b/opencensus/grpc/measure_double.py
new file mode 100644
index 000000000..f965dc227
--- /dev/null
+++ b/opencensus/grpc/measure_double.py
@@ -0,0 +1,30 @@
+from opencensus.grpc import measure
+import string
+
+class MeasureDouble(measure.Measure):
+
+ def __init__(self, name, description, unit):
+ if not (len(name) > self.name_max_length or all(ch in string.printable for ch in name)):
+ raise ValueError(self.error_msg_invalid_name)
+ self.name = name
+ self.description = description
+ self.unit = unit
+
+ def get_name(self):
+ return self.name
+
+ def get_description(self):
+ return self.description
+
+ def get_unit(self):
+ return self.unit
+
+ def match(self):
+ """
+ todo: implement later
+ will distinguish measure double from measure long
+ """
+ pass
+
+
+
diff --git a/opencensus/grpc/measure_long.py b/opencensus/grpc/measure_long.py
new file mode 100644
index 000000000..907933ab7
--- /dev/null
+++ b/opencensus/grpc/measure_long.py
@@ -0,0 +1,30 @@
+from opencensus.grpc import measure
+import string
+
+class MeasureLong(measure.Measure):
+
+ def __init__(self, name, description, unit):
+ if not (len(name) > self.name_max_length or all(ch in string.printable for ch in name)):
+ raise ValueError(self.error_msg_invalid_name)
+ self.name = name
+ self.description = description
+ self.unit = unit
+
+ def get_name(self):
+ return self.name
+
+ def get_description(self):
+ return self.description
+
+ def get_unit(self):
+ return self.unit
+
+ def match(self):
+ """
+ todo: implement later
+ will distinguish measure double from measure long
+ """
+ pass
+
+
+
diff --git a/opencensus/grpc/rpc_constants.py b/opencensus/grpc/rpc_constants.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/opencensus/grpc/rpc_measure_constants.py b/opencensus/grpc/rpc_measure_constants.py
new file mode 100644
index 000000000..aec89e54d
--- /dev/null
+++ b/opencensus/grpc/rpc_measure_constants.py
@@ -0,0 +1,151 @@
+from deprecated import deprecated
+from opencensus.tags import tag_key
+from opencensus.grpc import measure, measure_double, measure_long
+
+class RPCMeasureConstants():
+ """
+ constants for collecting RPC stats
+ """
+
+
+ def __init__(self):
+ """
+ needs fixing.
+ todo: do I put all the RPC constant fields in here?
+ """
+ @deprecated(version=0.8, reason="sf")
+ rpc_status = tag_key.TagKey("canonical_status") #deprecated
+
+ rpc_method = tag_key.TagKey("method") #deprecated
+ grpc_client_status = tag_key.TagKey("grpc_client_status")
+ grpc_server_status = tag_key.TagKey("grpc_server_status")
+ grpc_client_method = tag_key.TagKey("grpc_client_method")
+ grpc_server_method = tag_key.TagKey("grpc_server_method")
+ byte = "by"
+ count = "1"
+ millisecond = "ms"
+
+ # the MeasureDouble and MeasureLong
+ grpc_client_sent_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/client/sent_bytes_per_rpc",
+ "Total bytes sent across all request messages per RPC",
+ byte)
+ grpc_client_received_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/client/received_bytes_per_rpc",
+ "Total bytes received across all response messages per RPC",
+ byte)
+ grpc_client_sent_bytes_per_method = measure_double.MeasureDouble("grpc.io/client/sent_bytes_per_method",
+ "Total bytes sent per method, recorded real-time as bytes are sent.",
+ byte)
+ grpc_client_received_bytes_per_method = measure_double.MeasureDouble("grpc.io/client/received_bytes_per_method",
+ "Total bytes received per method, recorded real-time as bytes are received.",
+ byte)
+ grpc_client_sent_messages_per_method = measure_long.MeasureLong("grpc.io/client/sent_messages_per_method",
+ "Total messages sent per method.",
+ count)
+ grpc_client_received_messages_per_method = measure_long.MeasureLong("grpc.io/client/received_messages_per_method",
+ "Total messages received per method.",
+ count)
+ grpc_client_roundtrip_latency = measure_double.MeasureDouble("grpc.io/client/roundtrip_latency",
+ "Time between first byte of request sent to last byte of response received or terminal error.",
+ millisecond)
+ grpc_client_sent_messages_per_rpc = measure_long.MeasureLong("grpc.io/client/sent_messages_per_rpc",
+ "Number of messages sent in the RPC",
+ count)
+ grpc_client_received_messages_per_rpc = measure_long.MeasureLong("grpc.io/client/received_messages_per_rpc",
+ "Number of response messages received per RPC",
+ count)
+ grpc_client_server_latency = measure_double.MeasureDouble("grpc.io/client/server_latency",
+ "Server latency in msecs",
+ millisecond)
+ grpc_client_started_rpcs = measure_long.MeasureLong( "grpc.io/client/started_rpcs",
+ "Number of started client RPCs.",
+ count)
+ @deprecated(version=0.8, reason="because error counts can be computed on your metrics backend by totalling the different per-status values")
+ rpc_client_error_count = measure_long.MeasureLong("grpc.io/client/error_count",
+ "RPC Errors",
+ count)
+ @deprecated()
+ rpc_client_request_bytes = grpc_client_sent_bytes_per_rpc
+ @deprecated()
+ rpc_client_response_bytes = grpc_client_received_bytes_per_rpc
+ @deprecated()
+ rpc_client_roundtrip_latency = grpc_client_roundtrip_latency
+
+ @deprecated()
+ rpc_client_server_elapsed_time = grpc_client_server_latency
+
+ @deprecated()
+ rpc_client_uncompressed_request_bytes = measure_double.MeasureDouble("grpc.io/client/uncompressed_request_bytes",
+ "Uncompressed Request bytes",
+ byte)
+
+ @deprecated()
+ rpc_client_uncompressed_response_bytes = measure_double.MeasureDouble("grpc.io/client/uncompressed_response_bytes",
+ "Uncompressed Response bytes",
+ byte)
+
+ @deprecated()
+ rpc_client_started_count = grpc_client_started_rpcs
+
+ @deprecated()
+ rpc_client_finished_count = measure_long.MeasureLong("grpc.io/client/finished_count",
+ "Number of client RPCs (streams) finished",
+ count)
+
+ @deprecated()
+ rpc_client_request_count = grpc_client_sent_messages_per_rpc
+
+ @deprecated()
+ rpc_client_response_count = grpc_client_received_messages_per_rpc
+ grpc_server_sent_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/server/sent_bytes_per_rpc",
+ "Total bytes sent across all response messages per RPC",
+ byte)
+ grpc_server_received_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/server/received_bytes_per_rpc",
+ "Total bytes received across all messages per RPC",
+ byte)
+ grpc_server_sent_bytes_per_method = measure_double.MeasureDouble("grpc.io/server/sent_bytes_per_method",
+ "Total bytes sent per method, recorded real-time as bytes are sent.",
+ byte)
+ grpc_server_received_bytes_per_method = measure_double.MeasureDouble("grpc.io/server/received_bytes_per_method",
+ "Total bytes received per method, recorded real-time as bytes are received.",
+ byte)
+ grpc_server_sent_messages_per_method = measure_long.MeasureLong("grpc.io/server/sent_messages_per_method",
+ "Total messages sent per method.",
+ count)
+ grpc_server_received_messages_per_method = measure_long.MeasureLong("grpc.io/server/received_messages_per_method",
+ "Total messages received per method.",
+ count)
+ grpc_server_sent_messages_per_rpc = measure_long.MeasureLong("grpc.io/server/sent_messages_per_rpc", "Number of messages sent in each RPC", count)
+ grpc_server_received_messages_per_rpc = measure_long.MeasureLong("grpc.io/server/received_messages_per_rpc",
+ "Number of messages received in each RPC",
+ count)
+ grpc_server_server_latency = measure_double.MeasureDouble("grpc.io/server/server_latency",
+ "Time between first byte of request received to last byte of response sent or terminal error.",
+ millisecond)
+ grpc_server_started_rpcs = measure_long.MeasureLong("grpc.io/server/started_rpcs",
+ "Number of started server RPCs.",
+ count)
+ rpc_server_error_count = measure_long.MeasureLong("grpc.io/server/error_count",
+ "RPC Errors",
+ count)
+ rpc_server_request_bytes = grpc_server_sent_bytes_per_rpc
+ rpc_server_server_elapsed_time = measure_double.MeasureDouble("grpc.io/server/server_elapsed_time",
+ "Server elapsed time in msecs",
+ millisecond)
+ rpc_server_server_latency = grpc_server_server_latency
+ rpc_server_uncompressed_request_bytes = measure_double.MeasureDouble("grpc.io/server/uncompressed_request_bytes",
+ "Uncompressed Request bytes",
+ byte)
+ rpc_server_uncompressed_response_bytes = measure_double.MeasureDouble("grpc.io/server/uncompressed_response_bytes",
+ "Uncompressed Response bytes",
+ byte)
+ rpc_server_started_count =grpc_server_started_rpcs
+ rpc_server_finished_count = measure_long.MeasureLong( "grpc.io/server/finished_count",
+ "Number of server RPCs (streams) finished",
+ count)
+ rpc_server_request_count = grpc_server_received_messages_per_rpc
+ rpc_server_response_count = grpc_server_sent_messages_per_rpc
+
+
+
+
+
diff --git a/opencensus/zpages/test_application/app_example.py b/opencensus/zpages/test_application/app_example.py
index ebecf8b05..06dc3feb3 100644
--- a/opencensus/zpages/test_application/app_example.py
+++ b/opencensus/zpages/test_application/app_example.py
@@ -103,7 +103,7 @@ def main():
pprint(k)
pprint(vars(val))
- # tracer.exporter.emit(tracer.current_span())
+ tracer.exporter.emit(tracer.current_span())
tracer.exporter.export()
From fbaa6e2b8cfa4ddee557610a7d4e42ac4fe1a1d5 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Tue, 7 Apr 2020 17:55:22 -0400
Subject: [PATCH 30/66] removed deprecated measures, according to specs doc
---
opencensus/grpc/rpc_measure_constants.py | 142 +++++++++++++----------
1 file changed, 82 insertions(+), 60 deletions(-)
diff --git a/opencensus/grpc/rpc_measure_constants.py b/opencensus/grpc/rpc_measure_constants.py
index aec89e54d..882ff4fd0 100644
--- a/opencensus/grpc/rpc_measure_constants.py
+++ b/opencensus/grpc/rpc_measure_constants.py
@@ -6,59 +6,106 @@ class RPCMeasureConstants():
"""
constants for collecting RPC stats
"""
-
+ byte = "by"
+ count = "1"
+ millisecond = "ms"
def __init__(self):
"""
needs fixing.
todo: do I put all the RPC constant fields in here?
"""
- @deprecated(version=0.8, reason="sf")
- rpc_status = tag_key.TagKey("canonical_status") #deprecated
- rpc_method = tag_key.TagKey("method") #deprecated
+ # rpc_status = tag_key.TagKey("canonical_status") # @deprecated(version=0.8, reason="sf")
+ # rpc_method = tag_key.TagKey("method") # @deprecated(version=0.8, reason="sf")
+
+ #client tags
+ # gRPC server status code received, e.g. OK, CANCELLED, DEADLINE_EXCEEDED
grpc_client_status = tag_key.TagKey("grpc_client_status")
- grpc_server_status = tag_key.TagKey("grpc_server_status")
+ # Full gRPC method name, including package, service and method, e.g. google.bigtable.v2.Bigtable/CheckAndMutateRow
grpc_client_method = tag_key.TagKey("grpc_client_method")
+
+ #server tags
+ # gRPC server status code returned, e.g. OK, CANCELLED, DEADLINE_EXCEEDED
+ grpc_server_status = tag_key.TagKey("grpc_server_status")
+ # Full gRPC method name, including package, service and method, e.g. com.exampleapi.v4.BookshelfService/Checkout
grpc_server_method = tag_key.TagKey("grpc_server_method")
- byte = "by"
- count = "1"
- millisecond = "ms"
- # the MeasureDouble and MeasureLong
+
+ #client measures
+ grpc_client_sent_messages_per_rpc = measure_long.MeasureLong("grpc.io/client/sent_messages_per_rpc",
+ "Number of messages sent in the RPC",
+ self.count)
grpc_client_sent_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/client/sent_bytes_per_rpc",
"Total bytes sent across all request messages per RPC",
- byte)
+ self.byte)
+ grpc_client_received_messages_per_rpc = measure_long.MeasureLong("grpc.io/client/received_messages_per_rpc",
+ "Number of response messages received per RPC",
+ self.count)
grpc_client_received_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/client/received_bytes_per_rpc",
"Total bytes received across all response messages per RPC",
- byte)
+ self.byte)
+ grpc_client_roundtrip_latency = measure_double.MeasureDouble("grpc.io/client/roundtrip_latency",
+ "Time between first byte of request sent to last byte of response received or terminal error.",
+ self.millisecond)
+ grpc_client_server_latency = measure_double.MeasureDouble("grpc.io/client/server_latency",
+ "Server latency in msecs",
+ self.millisecond)
+ grpc_client_started_rpcs = measure_long.MeasureLong("grpc.io/client/started_rpcs",
+ "Number of started client RPCs.",
+ self.count)
+ grpc_client_sent_messages_per_method = measure_long.MeasureLong("grpc.io/client/sent_messages_per_method",
+ "Total messages sent per method.",
+ self.count)
+ grpc_client_received_messages_per_method = measure_long.MeasureLong("grpc.io/client/received_messages_per_method",
+ "Total messages received per method.",
+ self.count)
grpc_client_sent_bytes_per_method = measure_double.MeasureDouble("grpc.io/client/sent_bytes_per_method",
"Total bytes sent per method, recorded real-time as bytes are sent.",
- byte)
+ self.byte)
grpc_client_received_bytes_per_method = measure_double.MeasureDouble("grpc.io/client/received_bytes_per_method",
"Total bytes received per method, recorded real-time as bytes are received.",
- byte)
- grpc_client_sent_messages_per_method = measure_long.MeasureLong("grpc.io/client/sent_messages_per_method",
+ self.byte)
+
+
+ # server measures
+ grpc_server_received_messages_per_rpc = measure_long.MeasureLong("grpc.io/server/received_messages_per_rpc",
+ "Number of messages received in each RPC",
+ self.count)
+ grpc_server_received_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/server/received_bytes_per_rpc",
+ "Total bytes received across all messages per RPC",
+ self.byte)
+ grpc_server_sent_messages_per_rpc = measure_long.MeasureLong("grpc.io/server/sent_messages_per_rpc",
+ "Number of messages sent in each RPC",
+ self.count)
+ grpc_server_sent_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/server/sent_bytes_per_rpc",
+ "Total bytes sent across all response messages per RPC",
+ self.byte)
+ grpc_server_server_latency = measure_double.MeasureDouble("grpc.io/server/server_latency",
+ "Time between first byte of request received to last byte of response sent or terminal error.",
+ self.millisecond)
+ grpc_server_started_rpcs = measure_long.MeasureLong("grpc.io/server/started_rpcs",
+ "Number of started server RPCs.",
+ self.count)
+ grpc_server_sent_messages_per_method = measure_long.MeasureLong("grpc.io/server/sent_messages_per_method",
"Total messages sent per method.",
- count)
- grpc_client_received_messages_per_method = measure_long.MeasureLong("grpc.io/client/received_messages_per_method",
+ self.count)
+ grpc_server_received_messages_per_method = measure_long.MeasureLong("grpc.io/server/received_messages_per_method",
"Total messages received per method.",
- count)
- grpc_client_roundtrip_latency = measure_double.MeasureDouble("grpc.io/client/roundtrip_latency",
- "Time between first byte of request sent to last byte of response received or terminal error.",
- millisecond)
- grpc_client_sent_messages_per_rpc = measure_long.MeasureLong("grpc.io/client/sent_messages_per_rpc",
- "Number of messages sent in the RPC",
- count)
- grpc_client_received_messages_per_rpc = measure_long.MeasureLong("grpc.io/client/received_messages_per_rpc",
- "Number of response messages received per RPC",
- count)
- grpc_client_server_latency = measure_double.MeasureDouble("grpc.io/client/server_latency",
- "Server latency in msecs",
- millisecond)
- grpc_client_started_rpcs = measure_long.MeasureLong( "grpc.io/client/started_rpcs",
- "Number of started client RPCs.",
- count)
+ self.count)
+ grpc_server_sent_bytes_per_method = measure_double.MeasureDouble("grpc.io/server/sent_bytes_per_method",
+ "Total bytes sent per method, recorded real-time as bytes are sent.",
+ self.byte)
+ grpc_server_received_bytes_per_method = measure_double.MeasureDouble("grpc.io/server/received_bytes_per_method",
+ "Total bytes received per method, recorded real-time as bytes are received.",
+ self.byte)
+
+
+
+
+
+
+ """
@deprecated(version=0.8, reason="because error counts can be computed on your metrics backend by totalling the different per-status values")
rpc_client_error_count = measure_long.MeasureLong("grpc.io/client/error_count",
"RPC Errors",
@@ -96,34 +143,8 @@ def __init__(self):
@deprecated()
rpc_client_response_count = grpc_client_received_messages_per_rpc
- grpc_server_sent_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/server/sent_bytes_per_rpc",
- "Total bytes sent across all response messages per RPC",
- byte)
- grpc_server_received_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/server/received_bytes_per_rpc",
- "Total bytes received across all messages per RPC",
- byte)
- grpc_server_sent_bytes_per_method = measure_double.MeasureDouble("grpc.io/server/sent_bytes_per_method",
- "Total bytes sent per method, recorded real-time as bytes are sent.",
- byte)
- grpc_server_received_bytes_per_method = measure_double.MeasureDouble("grpc.io/server/received_bytes_per_method",
- "Total bytes received per method, recorded real-time as bytes are received.",
- byte)
- grpc_server_sent_messages_per_method = measure_long.MeasureLong("grpc.io/server/sent_messages_per_method",
- "Total messages sent per method.",
- count)
- grpc_server_received_messages_per_method = measure_long.MeasureLong("grpc.io/server/received_messages_per_method",
- "Total messages received per method.",
- count)
- grpc_server_sent_messages_per_rpc = measure_long.MeasureLong("grpc.io/server/sent_messages_per_rpc", "Number of messages sent in each RPC", count)
- grpc_server_received_messages_per_rpc = measure_long.MeasureLong("grpc.io/server/received_messages_per_rpc",
- "Number of messages received in each RPC",
- count)
- grpc_server_server_latency = measure_double.MeasureDouble("grpc.io/server/server_latency",
- "Time between first byte of request received to last byte of response sent or terminal error.",
- millisecond)
- grpc_server_started_rpcs = measure_long.MeasureLong("grpc.io/server/started_rpcs",
- "Number of started server RPCs.",
- count)
+
+
rpc_server_error_count = measure_long.MeasureLong("grpc.io/server/error_count",
"RPC Errors",
count)
@@ -144,6 +165,7 @@ def __init__(self):
count)
rpc_server_request_count = grpc_server_received_messages_per_rpc
rpc_server_response_count = grpc_server_sent_messages_per_rpc
+ """
From 69293c306432197df89a42eb25903f6e7502d5d2 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Tue, 7 Apr 2020 18:56:59 -0400
Subject: [PATCH 31/66] added init.py to grpc folder to get imports working
---
opencensus/grpc/__init__.py | 1 +
opencensus/grpc/rpc_m_c_test.py | 15 +++++++++++++++
opencensus/grpc/rpc_measure_constants.py | 1 +
3 files changed, 17 insertions(+)
create mode 100755 opencensus/grpc/__init__.py
create mode 100644 opencensus/grpc/rpc_m_c_test.py
diff --git a/opencensus/grpc/__init__.py b/opencensus/grpc/__init__.py
new file mode 100755
index 000000000..69e3be50d
--- /dev/null
+++ b/opencensus/grpc/__init__.py
@@ -0,0 +1 @@
+__path__ = __import__('pkgutil').extend_path(__path__, __name__)
diff --git a/opencensus/grpc/rpc_m_c_test.py b/opencensus/grpc/rpc_m_c_test.py
new file mode 100644
index 000000000..7bae1a362
--- /dev/null
+++ b/opencensus/grpc/rpc_m_c_test.py
@@ -0,0 +1,15 @@
+import unittest
+
+from opencensus.trace.tracer import Tracer
+from opencensus.grpc.rpc_measure_constants import RPCMeasureConstants
+
+class RPCMCTests(unittest.TestCase):
+
+ def setUp(self):
+ self.rpc_measure = RPCMeasureConstants()
+
+ def test_client_measure_1(self):
+ assert self.rpc_measure.grpc_client_sent_messages_per_rpc.get_description == "Number of messages sent in the RPC", "description not set"
+
+if __name__ == '__main__':
+ unittest.main()
\ No newline at end of file
diff --git a/opencensus/grpc/rpc_measure_constants.py b/opencensus/grpc/rpc_measure_constants.py
index 882ff4fd0..f3bce28eb 100644
--- a/opencensus/grpc/rpc_measure_constants.py
+++ b/opencensus/grpc/rpc_measure_constants.py
@@ -2,6 +2,7 @@
from opencensus.tags import tag_key
from opencensus.grpc import measure, measure_double, measure_long
+
class RPCMeasureConstants():
"""
constants for collecting RPC stats
From 0cb0026655033f0ed94a66bc97ca9b8e04f53510 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Wed, 8 Apr 2020 10:46:17 -0400
Subject: [PATCH 32/66] removed deprecations
---
opencensus/grpc/__init__.py | 14 +++++++++++++-
opencensus/trace/__init__.py | 3 +++
opencensus/{grpc => trace}/measure.py | 5 +++--
opencensus/{grpc => trace}/measure_double.py | 2 +-
opencensus/{grpc => trace}/measure_long.py | 6 ++++--
opencensus/{grpc => trace}/rpc_m_c_test.py | 8 +++++---
.../{grpc => trace}/rpc_measure_constants.py | 9 ++++-----
7 files changed, 33 insertions(+), 14 deletions(-)
rename opencensus/{grpc => trace}/measure.py (86%)
mode change 100644 => 100755
rename opencensus/{grpc => trace}/measure_double.py (94%)
rename opencensus/{grpc => trace}/measure_long.py (88%)
mode change 100644 => 100755
rename opencensus/{grpc => trace}/rpc_m_c_test.py (61%)
rename opencensus/{grpc => trace}/rpc_measure_constants.py (98%)
diff --git a/opencensus/grpc/__init__.py b/opencensus/grpc/__init__.py
index 69e3be50d..c04609d83 100755
--- a/opencensus/grpc/__init__.py
+++ b/opencensus/grpc/__init__.py
@@ -1 +1,13 @@
-__path__ = __import__('pkgutil').extend_path(__path__, __name__)
+# Copyright 2018, OpenCensus Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
\ No newline at end of file
diff --git a/opencensus/trace/__init__.py b/opencensus/trace/__init__.py
index a55903b90..6c55d422f 100644
--- a/opencensus/trace/__init__.py
+++ b/opencensus/trace/__init__.py
@@ -12,6 +12,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+
from opencensus.trace.span import Span
+
__all__ = ['Span']
+
diff --git a/opencensus/grpc/measure.py b/opencensus/trace/measure.py
old mode 100644
new mode 100755
similarity index 86%
rename from opencensus/grpc/measure.py
rename to opencensus/trace/measure.py
index 6085d65f6..876dcdb13
--- a/opencensus/grpc/measure.py
+++ b/opencensus/trace/measure.py
@@ -1,6 +1,7 @@
+#!/usr/bin/env python3
+from opencensus.trace import tracer
-
-class Measure():
+class Measure:
"""
defines Measurement taken by OpenCensus library
"""
diff --git a/opencensus/grpc/measure_double.py b/opencensus/trace/measure_double.py
similarity index 94%
rename from opencensus/grpc/measure_double.py
rename to opencensus/trace/measure_double.py
index f965dc227..467586730 100644
--- a/opencensus/grpc/measure_double.py
+++ b/opencensus/trace/measure_double.py
@@ -1,4 +1,4 @@
-from opencensus.grpc import measure
+from opencensus.trace import measure
import string
class MeasureDouble(measure.Measure):
diff --git a/opencensus/grpc/measure_long.py b/opencensus/trace/measure_long.py
old mode 100644
new mode 100755
similarity index 88%
rename from opencensus/grpc/measure_long.py
rename to opencensus/trace/measure_long.py
index 907933ab7..7e48143f0
--- a/opencensus/grpc/measure_long.py
+++ b/opencensus/trace/measure_long.py
@@ -1,7 +1,9 @@
-from opencensus.grpc import measure
+#!/usr/bin/env python3
+from .measure import Measure
import string
-class MeasureLong(measure.Measure):
+
+class MeasureLong(Measure):
def __init__(self, name, description, unit):
if not (len(name) > self.name_max_length or all(ch in string.printable for ch in name)):
diff --git a/opencensus/grpc/rpc_m_c_test.py b/opencensus/trace/rpc_m_c_test.py
similarity index 61%
rename from opencensus/grpc/rpc_m_c_test.py
rename to opencensus/trace/rpc_m_c_test.py
index 7bae1a362..b9bbc3737 100644
--- a/opencensus/grpc/rpc_m_c_test.py
+++ b/opencensus/trace/rpc_m_c_test.py
@@ -1,12 +1,14 @@
import unittest
-from opencensus.trace.tracer import Tracer
-from opencensus.grpc.rpc_measure_constants import RPCMeasureConstants
+from opencensus.trace import rpc_measure_constants
+
+
+# from opencensus.grpc.rpc_measure_constants import RPCMeasureConstants
class RPCMCTests(unittest.TestCase):
def setUp(self):
- self.rpc_measure = RPCMeasureConstants()
+ self.rpc_measure = rpc_measure_constants.RPCMeasureConstants()
def test_client_measure_1(self):
assert self.rpc_measure.grpc_client_sent_messages_per_rpc.get_description == "Number of messages sent in the RPC", "description not set"
diff --git a/opencensus/grpc/rpc_measure_constants.py b/opencensus/trace/rpc_measure_constants.py
similarity index 98%
rename from opencensus/grpc/rpc_measure_constants.py
rename to opencensus/trace/rpc_measure_constants.py
index f3bce28eb..029c565c9 100644
--- a/opencensus/grpc/rpc_measure_constants.py
+++ b/opencensus/trace/rpc_measure_constants.py
@@ -1,6 +1,5 @@
-from deprecated import deprecated
from opencensus.tags import tag_key
-from opencensus.grpc import measure, measure_double, measure_long
+from opencensus.trace import measure_double, measure_long
class RPCMeasureConstants():
@@ -39,13 +38,13 @@ def __init__(self):
self.count)
grpc_client_sent_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/client/sent_bytes_per_rpc",
"Total bytes sent across all request messages per RPC",
- self.byte)
+ self.byte)
grpc_client_received_messages_per_rpc = measure_long.MeasureLong("grpc.io/client/received_messages_per_rpc",
"Number of response messages received per RPC",
self.count)
grpc_client_received_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/client/received_bytes_per_rpc",
"Total bytes received across all response messages per RPC",
- self.byte)
+ self.byte)
grpc_client_roundtrip_latency = measure_double.MeasureDouble("grpc.io/client/roundtrip_latency",
"Time between first byte of request sent to last byte of response received or terminal error.",
self.millisecond)
@@ -54,7 +53,7 @@ def __init__(self):
self.millisecond)
grpc_client_started_rpcs = measure_long.MeasureLong("grpc.io/client/started_rpcs",
"Number of started client RPCs.",
- self.count)
+ self.count)
grpc_client_sent_messages_per_method = measure_long.MeasureLong("grpc.io/client/sent_messages_per_method",
"Total messages sent per method.",
self.count)
From 0423441061391b5c043bae612fc6050801a1bffb Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Thu, 9 Apr 2020 16:44:02 -0400
Subject: [PATCH 33/66] got rid of import errors
---
opencensus/trace/__init__.py | 8 ++++++--
opencensus/trace/measure_double.py | 2 +-
opencensus/trace/measure_long.py | 4 ++--
opencensus/trace/rpc_m_c_test.py | 4 ++--
opencensus/trace/rpc_measure_constants.py | 5 +++--
5 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/opencensus/trace/__init__.py b/opencensus/trace/__init__.py
index 6c55d422f..5d701b70f 100644
--- a/opencensus/trace/__init__.py
+++ b/opencensus/trace/__init__.py
@@ -13,8 +13,12 @@
# limitations under the License.
-from opencensus.trace.span import Span
+from opencensus.trace.span import Span # original
+import measure
+import measure_long
+import measure_double
+import rpc_measure_constants
+__all__ = ['Span'] # modified this to add Measure
-__all__ = ['Span']
diff --git a/opencensus/trace/measure_double.py b/opencensus/trace/measure_double.py
index 467586730..bb275432c 100644
--- a/opencensus/trace/measure_double.py
+++ b/opencensus/trace/measure_double.py
@@ -1,4 +1,4 @@
-from opencensus.trace import measure
+import measure
import string
class MeasureDouble(measure.Measure):
diff --git a/opencensus/trace/measure_long.py b/opencensus/trace/measure_long.py
index 7e48143f0..ec76c255d 100755
--- a/opencensus/trace/measure_long.py
+++ b/opencensus/trace/measure_long.py
@@ -1,9 +1,9 @@
#!/usr/bin/env python3
-from .measure import Measure
+import measure
import string
-class MeasureLong(Measure):
+class MeasureLong(measure.Measure):
def __init__(self, name, description, unit):
if not (len(name) > self.name_max_length or all(ch in string.printable for ch in name)):
diff --git a/opencensus/trace/rpc_m_c_test.py b/opencensus/trace/rpc_m_c_test.py
index b9bbc3737..638a526f1 100644
--- a/opencensus/trace/rpc_m_c_test.py
+++ b/opencensus/trace/rpc_m_c_test.py
@@ -1,7 +1,7 @@
import unittest
-from opencensus.trace import rpc_measure_constants
-
+# from opencensus.trace import rpc_measure_constants
+import rpc_measure_constants
# from opencensus.grpc.rpc_measure_constants import RPCMeasureConstants
diff --git a/opencensus/trace/rpc_measure_constants.py b/opencensus/trace/rpc_measure_constants.py
index 029c565c9..ab9551a01 100644
--- a/opencensus/trace/rpc_measure_constants.py
+++ b/opencensus/trace/rpc_measure_constants.py
@@ -1,6 +1,7 @@
from opencensus.tags import tag_key
-from opencensus.trace import measure_double, measure_long
-
+# from opencensus.trace import measure_double, measure_long
+import measure_long
+import measure_double
class RPCMeasureConstants():
"""
From 2d75ab21fe0e228dee164c8f598fedf827ced49d Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Thu, 9 Apr 2020 19:43:08 -0400
Subject: [PATCH 34/66] simpler design for measure, few tests
---
opencensus/trace/__init__.py | 2 -
opencensus/trace/measure.py | 36 +++---
opencensus/trace/measure_double.py | 4 +-
opencensus/trace/measure_long.py | 32 ------
opencensus/trace/measure_old.py | 25 ++++
opencensus/trace/rpc_m_c_test.py | 10 +-
opencensus/trace/rpc_measure_constants.py | 133 +++++-----------------
7 files changed, 87 insertions(+), 155 deletions(-)
delete mode 100755 opencensus/trace/measure_long.py
create mode 100755 opencensus/trace/measure_old.py
diff --git a/opencensus/trace/__init__.py b/opencensus/trace/__init__.py
index 5d701b70f..de8dbf1cd 100644
--- a/opencensus/trace/__init__.py
+++ b/opencensus/trace/__init__.py
@@ -15,8 +15,6 @@
from opencensus.trace.span import Span # original
import measure
-import measure_long
-import measure_double
import rpc_measure_constants
__all__ = ['Span'] # modified this to add Measure
diff --git a/opencensus/trace/measure.py b/opencensus/trace/measure.py
index 876dcdb13..c1577487f 100755
--- a/opencensus/trace/measure.py
+++ b/opencensus/trace/measure.py
@@ -1,25 +1,33 @@
#!/usr/bin/env python3
-from opencensus.trace import tracer
+import string
+
+name_max_length = 255
+error_msg_invalid_name = f"Name should be a ASCII string with a length no greater than {name_max_length} characters."
-class Measure:
- """
- defines Measurement taken by OpenCensus library
- """
- def __new__(cls):
- name_max_length = 255
- error_msg_invalid_name = f"Name should be a ASCII string with a length no greater than {name_max_length} characters."
- return object.__new__(cls)
+class Measure:
+ def __init__(self, name, description, unit):
+ if not (len(name) > name_max_length or all(ch in string.printable for ch in name)):
+ raise ValueError(error_msg_invalid_name)
+ self.name = name
+ self.description = description
+ self.unit = unit
def get_name(self):
- return
+ return self.name
def get_description(self):
- return
+ return self.description
def get_unit(self):
- return
+ return self.unit
+
+ def match(self):
+ """
+ todo: implement later
+ will distinguish measure double from measure long
+ """
+ pass
+
- def create_double(self):
- return
diff --git a/opencensus/trace/measure_double.py b/opencensus/trace/measure_double.py
index bb275432c..4be576fb4 100644
--- a/opencensus/trace/measure_double.py
+++ b/opencensus/trace/measure_double.py
@@ -1,7 +1,7 @@
-import measure
+import measure_old
import string
-class MeasureDouble(measure.Measure):
+class MeasureDouble(measure_old.Measure):
def __init__(self, name, description, unit):
if not (len(name) > self.name_max_length or all(ch in string.printable for ch in name)):
diff --git a/opencensus/trace/measure_long.py b/opencensus/trace/measure_long.py
deleted file mode 100755
index ec76c255d..000000000
--- a/opencensus/trace/measure_long.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python3
-import measure
-import string
-
-
-class MeasureLong(measure.Measure):
-
- def __init__(self, name, description, unit):
- if not (len(name) > self.name_max_length or all(ch in string.printable for ch in name)):
- raise ValueError(self.error_msg_invalid_name)
- self.name = name
- self.description = description
- self.unit = unit
-
- def get_name(self):
- return self.name
-
- def get_description(self):
- return self.description
-
- def get_unit(self):
- return self.unit
-
- def match(self):
- """
- todo: implement later
- will distinguish measure double from measure long
- """
- pass
-
-
-
diff --git a/opencensus/trace/measure_old.py b/opencensus/trace/measure_old.py
new file mode 100755
index 000000000..876dcdb13
--- /dev/null
+++ b/opencensus/trace/measure_old.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python3
+from opencensus.trace import tracer
+
+class Measure:
+ """
+ defines Measurement taken by OpenCensus library
+ """
+
+ def __new__(cls):
+ name_max_length = 255
+ error_msg_invalid_name = f"Name should be a ASCII string with a length no greater than {name_max_length} characters."
+ return object.__new__(cls)
+
+ def get_name(self):
+ return
+
+ def get_description(self):
+ return
+
+ def get_unit(self):
+ return
+
+ def create_double(self):
+ return
+
diff --git a/opencensus/trace/rpc_m_c_test.py b/opencensus/trace/rpc_m_c_test.py
index 638a526f1..b14104e36 100644
--- a/opencensus/trace/rpc_m_c_test.py
+++ b/opencensus/trace/rpc_m_c_test.py
@@ -10,8 +10,14 @@ class RPCMCTests(unittest.TestCase):
def setUp(self):
self.rpc_measure = rpc_measure_constants.RPCMeasureConstants()
- def test_client_measure_1(self):
- assert self.rpc_measure.grpc_client_sent_messages_per_rpc.get_description == "Number of messages sent in the RPC", "description not set"
+ def test_client_measures(self):
+ self.assertEqual(self.rpc_measure.grpc_client_sent_messages_per_rpc.get_unit(), "1", "unit not set correctly on init")
+
+
+ def test_client_measures_2(self):
+ self.assertEqual(self.rpc_measure.grpc_client_sent_bytes_per_rpc.get_description(), "Total bytes sent across all request messages per RPC", "description not set correctly on init")
+ self.assertEqual(self.rpc_measure.grpc_client_received_messages_per_rpc.get_name(), "grpc.io/client/received_messages_per_rpc", "name not set correctly on init")
+ self.assertEqual(self.rpc_measure.grpc_client_received_bytes_per_rpc.get_unit(), "by", "unit not set correctly upon init")
if __name__ == '__main__':
unittest.main()
\ No newline at end of file
diff --git a/opencensus/trace/rpc_measure_constants.py b/opencensus/trace/rpc_measure_constants.py
index ab9551a01..7789cf578 100644
--- a/opencensus/trace/rpc_measure_constants.py
+++ b/opencensus/trace/rpc_measure_constants.py
@@ -1,7 +1,9 @@
from opencensus.tags import tag_key
# from opencensus.trace import measure_double, measure_long
-import measure_long
-import measure_double
+# import measure_long
+# import measure_double
+import measure
+
class RPCMeasureConstants():
"""
@@ -17,158 +19,83 @@ def __init__(self):
todo: do I put all the RPC constant fields in here?
"""
- # rpc_status = tag_key.TagKey("canonical_status") # @deprecated(version=0.8, reason="sf")
- # rpc_method = tag_key.TagKey("method") # @deprecated(version=0.8, reason="sf")
-
#client tags
# gRPC server status code received, e.g. OK, CANCELLED, DEADLINE_EXCEEDED
- grpc_client_status = tag_key.TagKey("grpc_client_status")
+ self.grpc_client_status = tag_key.TagKey("grpc_client_status")
# Full gRPC method name, including package, service and method, e.g. google.bigtable.v2.Bigtable/CheckAndMutateRow
- grpc_client_method = tag_key.TagKey("grpc_client_method")
+ self.grpc_client_method = tag_key.TagKey("grpc_client_method")
#server tags
# gRPC server status code returned, e.g. OK, CANCELLED, DEADLINE_EXCEEDED
- grpc_server_status = tag_key.TagKey("grpc_server_status")
+ self.grpc_server_status = tag_key.TagKey("grpc_server_status")
# Full gRPC method name, including package, service and method, e.g. com.exampleapi.v4.BookshelfService/Checkout
- grpc_server_method = tag_key.TagKey("grpc_server_method")
+ self.grpc_server_method = tag_key.TagKey("grpc_server_method")
#client measures
- grpc_client_sent_messages_per_rpc = measure_long.MeasureLong("grpc.io/client/sent_messages_per_rpc",
+ self.grpc_client_sent_messages_per_rpc = measure.Measure("grpc.io/client/sent_messages_per_rpc",
"Number of messages sent in the RPC",
self.count)
- grpc_client_sent_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/client/sent_bytes_per_rpc",
+ self.grpc_client_sent_bytes_per_rpc = measure.Measure("grpc.io/client/sent_bytes_per_rpc",
"Total bytes sent across all request messages per RPC",
self.byte)
- grpc_client_received_messages_per_rpc = measure_long.MeasureLong("grpc.io/client/received_messages_per_rpc",
+ self.grpc_client_received_messages_per_rpc = measure.Measure("grpc.io/client/received_messages_per_rpc",
"Number of response messages received per RPC",
self.count)
- grpc_client_received_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/client/received_bytes_per_rpc",
+ self.grpc_client_received_bytes_per_rpc = measure.Measure("grpc.io/client/received_bytes_per_rpc",
"Total bytes received across all response messages per RPC",
self.byte)
- grpc_client_roundtrip_latency = measure_double.MeasureDouble("grpc.io/client/roundtrip_latency",
+ self.grpc_client_roundtrip_latency = measure.Measure("grpc.io/client/roundtrip_latency",
"Time between first byte of request sent to last byte of response received or terminal error.",
self.millisecond)
- grpc_client_server_latency = measure_double.MeasureDouble("grpc.io/client/server_latency",
+ self.grpc_client_server_latency = measure.Measure("grpc.io/client/server_latency",
"Server latency in msecs",
self.millisecond)
- grpc_client_started_rpcs = measure_long.MeasureLong("grpc.io/client/started_rpcs",
+ self.grpc_client_started_rpcs = measure.Measure("grpc.io/client/started_rpcs",
"Number of started client RPCs.",
self.count)
- grpc_client_sent_messages_per_method = measure_long.MeasureLong("grpc.io/client/sent_messages_per_method",
+ self.grpc_client_sent_messages_per_method = measure.Measure("grpc.io/client/sent_messages_per_method",
"Total messages sent per method.",
self.count)
- grpc_client_received_messages_per_method = measure_long.MeasureLong("grpc.io/client/received_messages_per_method",
+ self.grpc_client_received_messages_per_method = measure.Measure("grpc.io/client/received_messages_per_method",
"Total messages received per method.",
self.count)
- grpc_client_sent_bytes_per_method = measure_double.MeasureDouble("grpc.io/client/sent_bytes_per_method",
+ self.grpc_client_sent_bytes_per_method = measure.Measure("grpc.io/client/sent_bytes_per_method",
"Total bytes sent per method, recorded real-time as bytes are sent.",
self.byte)
- grpc_client_received_bytes_per_method = measure_double.MeasureDouble("grpc.io/client/received_bytes_per_method",
+ self.grpc_client_received_bytes_per_method = measure.Measure("grpc.io/client/received_bytes_per_method",
"Total bytes received per method, recorded real-time as bytes are received.",
self.byte)
# server measures
- grpc_server_received_messages_per_rpc = measure_long.MeasureLong("grpc.io/server/received_messages_per_rpc",
+ self.grpc_server_received_messages_per_rpc = measure.Measure("grpc.io/server/received_messages_per_rpc",
"Number of messages received in each RPC",
self.count)
- grpc_server_received_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/server/received_bytes_per_rpc",
+ self.grpc_server_received_bytes_per_rpc = measure.Measure("grpc.io/server/received_bytes_per_rpc",
"Total bytes received across all messages per RPC",
self.byte)
- grpc_server_sent_messages_per_rpc = measure_long.MeasureLong("grpc.io/server/sent_messages_per_rpc",
+ self.grpc_server_sent_messages_per_rpc = measure.Measure("grpc.io/server/sent_messages_per_rpc",
"Number of messages sent in each RPC",
self.count)
- grpc_server_sent_bytes_per_rpc = measure_double.MeasureDouble("grpc.io/server/sent_bytes_per_rpc",
+ self.grpc_server_sent_bytes_per_rpc = measure.Measure("grpc.io/server/sent_bytes_per_rpc",
"Total bytes sent across all response messages per RPC",
self.byte)
- grpc_server_server_latency = measure_double.MeasureDouble("grpc.io/server/server_latency",
+ self.grpc_server_server_latency = measure.Measure("grpc.io/server/server_latency",
"Time between first byte of request received to last byte of response sent or terminal error.",
self.millisecond)
- grpc_server_started_rpcs = measure_long.MeasureLong("grpc.io/server/started_rpcs",
+ self.grpc_server_started_rpcs = measure.Measure("grpc.io/server/started_rpcs",
"Number of started server RPCs.",
self.count)
- grpc_server_sent_messages_per_method = measure_long.MeasureLong("grpc.io/server/sent_messages_per_method",
+ self.grpc_server_sent_messages_per_method = measure.Measure("grpc.io/server/sent_messages_per_method",
"Total messages sent per method.",
self.count)
- grpc_server_received_messages_per_method = measure_long.MeasureLong("grpc.io/server/received_messages_per_method",
+ self.grpc_server_received_messages_per_method = measure.Measure("grpc.io/server/received_messages_per_method",
"Total messages received per method.",
self.count)
- grpc_server_sent_bytes_per_method = measure_double.MeasureDouble("grpc.io/server/sent_bytes_per_method",
+ self.grpc_server_sent_bytes_per_method = measure.Measure("grpc.io/server/sent_bytes_per_method",
"Total bytes sent per method, recorded real-time as bytes are sent.",
self.byte)
- grpc_server_received_bytes_per_method = measure_double.MeasureDouble("grpc.io/server/received_bytes_per_method",
+ self.grpc_server_received_bytes_per_method = measure.Measure("grpc.io/server/received_bytes_per_method",
"Total bytes received per method, recorded real-time as bytes are received.",
- self.byte)
-
-
-
-
-
-
- """
- @deprecated(version=0.8, reason="because error counts can be computed on your metrics backend by totalling the different per-status values")
- rpc_client_error_count = measure_long.MeasureLong("grpc.io/client/error_count",
- "RPC Errors",
- count)
- @deprecated()
- rpc_client_request_bytes = grpc_client_sent_bytes_per_rpc
- @deprecated()
- rpc_client_response_bytes = grpc_client_received_bytes_per_rpc
- @deprecated()
- rpc_client_roundtrip_latency = grpc_client_roundtrip_latency
-
- @deprecated()
- rpc_client_server_elapsed_time = grpc_client_server_latency
-
- @deprecated()
- rpc_client_uncompressed_request_bytes = measure_double.MeasureDouble("grpc.io/client/uncompressed_request_bytes",
- "Uncompressed Request bytes",
- byte)
-
- @deprecated()
- rpc_client_uncompressed_response_bytes = measure_double.MeasureDouble("grpc.io/client/uncompressed_response_bytes",
- "Uncompressed Response bytes",
- byte)
-
- @deprecated()
- rpc_client_started_count = grpc_client_started_rpcs
-
- @deprecated()
- rpc_client_finished_count = measure_long.MeasureLong("grpc.io/client/finished_count",
- "Number of client RPCs (streams) finished",
- count)
-
- @deprecated()
- rpc_client_request_count = grpc_client_sent_messages_per_rpc
-
- @deprecated()
- rpc_client_response_count = grpc_client_received_messages_per_rpc
-
-
- rpc_server_error_count = measure_long.MeasureLong("grpc.io/server/error_count",
- "RPC Errors",
- count)
- rpc_server_request_bytes = grpc_server_sent_bytes_per_rpc
- rpc_server_server_elapsed_time = measure_double.MeasureDouble("grpc.io/server/server_elapsed_time",
- "Server elapsed time in msecs",
- millisecond)
- rpc_server_server_latency = grpc_server_server_latency
- rpc_server_uncompressed_request_bytes = measure_double.MeasureDouble("grpc.io/server/uncompressed_request_bytes",
- "Uncompressed Request bytes",
- byte)
- rpc_server_uncompressed_response_bytes = measure_double.MeasureDouble("grpc.io/server/uncompressed_response_bytes",
- "Uncompressed Response bytes",
- byte)
- rpc_server_started_count =grpc_server_started_rpcs
- rpc_server_finished_count = measure_long.MeasureLong( "grpc.io/server/finished_count",
- "Number of server RPCs (streams) finished",
- count)
- rpc_server_request_count = grpc_server_received_messages_per_rpc
- rpc_server_response_count = grpc_server_sent_messages_per_rpc
- """
-
-
-
-
-
+ self.byte)
\ No newline at end of file
From dd083f95ab5d1674a1a174e69e70bb8233eb5710 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Thu, 9 Apr 2020 20:56:56 -0400
Subject: [PATCH 35/66] added tests for rpc_measure_constants
---
opencensus/trace/rpc_m_c_test.py | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git a/opencensus/trace/rpc_m_c_test.py b/opencensus/trace/rpc_m_c_test.py
index b14104e36..019f7a281 100644
--- a/opencensus/trace/rpc_m_c_test.py
+++ b/opencensus/trace/rpc_m_c_test.py
@@ -12,12 +12,30 @@ def setUp(self):
def test_client_measures(self):
self.assertEqual(self.rpc_measure.grpc_client_sent_messages_per_rpc.get_unit(), "1", "unit not set correctly on init")
-
-
- def test_client_measures_2(self):
self.assertEqual(self.rpc_measure.grpc_client_sent_bytes_per_rpc.get_description(), "Total bytes sent across all request messages per RPC", "description not set correctly on init")
self.assertEqual(self.rpc_measure.grpc_client_received_messages_per_rpc.get_name(), "grpc.io/client/received_messages_per_rpc", "name not set correctly on init")
self.assertEqual(self.rpc_measure.grpc_client_received_bytes_per_rpc.get_unit(), "by", "unit not set correctly upon init")
+ self.assertEqual(self.rpc_measure.grpc_client_roundtrip_latency.get_name(), "grpc.io/client/roundtrip_latency", "grpc_client_roundtrip_latency not initialized correctly")
+ self.assertEqual(self.rpc_measure.grpc_client_server_latency.get_name(), "grpc.io/client/server_latency", "grpc_client_server_latency not set properly")
+ self.assertEqual(self.rpc_measure.grpc_client_started_rpcs.get_description(), "Number of started client RPCs.", "grpc_client_started_rpcs not set properly")
+ self.assertEqual(self.rpc_measure.grpc_client_sent_messages_per_method.get_unit(), "1", "grpc_client_sent_messages_per_method not set properly")
+ self.assertEqual(self.rpc_measure.grpc_client_received_messages_per_method.get_name(), "grpc.io/client/received_messages_per_method", "grpc_client_received_messages_per_method not set properly")
+ self.assertEqual(self.rpc_measure.grpc_client_sent_bytes_per_method.get_description(), "Total bytes sent per method, recorded real-time as bytes are sent.", "grpc_client_sent_bytes_per_method not set properly")
+ self.assertEqual(self.rpc_measure.grpc_client_received_bytes_per_method.get_unit(), "by", "grpc_client_received_bytes_per_method not set properly")
+
+
+ def test_server_measures(self):
+ self.assertEqual(self.rpc_measure.grpc_server_received_messages_per_rpc.get_name(), "grpc.io/server/received_messages_per_rpc", "grpc_server_received_messages_per_rpc not set properly")
+ self.assertEqual(self.rpc_measure.grpc_server_received_bytes_per_rpc.get_description(), "Total bytes received across all messages per RPC", "grpc_server_received_bytes_per_rpc not set properly")
+ self.assertEqual(self.rpc_measure.grpc_server_sent_messages_per_rpc.get_unit(), "1", "grpc_server_sent_messages_per_rpc not set properly")
+ self.assertEqual(self.rpc_measure.grpc_server_sent_bytes_per_rpc.get_name(), "grpc.io/server/sent_bytes_per_rpc", "grpc_server_sent_bytes_per_rpc not set properly")
+ self.assertEqual(self.rpc_measure.grpc_server_server_latency.get_description(), "Time between first byte of request received to last byte of response sent or terminal error.", "grpc_server_server_latency not set properly")
+ self.assertEqual(self.rpc_measure.grpc_server_started_rpcs.get_unit(), "1", "grpc_server_started_rpcs not set correctly")
+ self.assertEqual(self.rpc_measure.grpc_server_sent_messages_per_method.get_name(), "grpc.io/server/sent_messages_per_method", "grpc_server_sent_messages_per_method not set correctly")
+ self.assertEqual(self.rpc_measure.grpc_server_received_messages_per_method.get_description(), "Total messages received per method.", "grpc_server_received_messages_per_method not set correctly")
+ self.assertEqual(self.rpc_measure.grpc_server_sent_bytes_per_method.get_unit(), "by", "grpc_server_sent_bytes_per_method not set correctly")
+ self.assertEqual(self.rpc_measure.grpc_server_received_bytes_per_method.get_name(), "grpc.io/server/received_bytes_per_method", "grpc_server_received_bytes_per_method not set correctly")
+
if __name__ == '__main__':
unittest.main()
\ No newline at end of file
From 775e23794d1e017c08ed45237371d5121764842a Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Fri, 10 Apr 2020 00:06:43 -0400
Subject: [PATCH 36/66] fixed pylint for measure.py
---
opencensus/trace/measure.py | 42 ++++++++++++++++++++++++--------
opencensus/trace/measure_test.py | 30 +++++++++++++++++++++++
opencensus/trace/rpc_m_c_test.py | 2 +-
3 files changed, 63 insertions(+), 11 deletions(-)
create mode 100644 opencensus/trace/measure_test.py
diff --git a/opencensus/trace/measure.py b/opencensus/trace/measure.py
index c1577487f..695ee721c 100755
--- a/opencensus/trace/measure.py
+++ b/opencensus/trace/measure.py
@@ -1,33 +1,55 @@
#!/usr/bin/env python3
import string
-name_max_length = 255
-error_msg_invalid_name = f"Name should be a ASCII string with a length no greater than {name_max_length} characters."
+NAME_MAX_LENGTH = 255
+ERROR_MSG_INVALID_NAME = f"Name should be a ASCII string with a length " \
+ f"no greater than {NAME_MAX_LENGTH} characters."
class Measure:
+ """
+ Measure is for the definition of a measurement that is taken by OpenCensus library
+
+ attributes and their specifications taken from specs docuemntation in opencensus-python
+
+ :type str
+ :param name: name of the measurement
+
+ :type str
+ :param description: description of the measurement
+
+ :type str
+ :param unit: unit of the measurement, either: "ms" (for latencies in milliseconds),
+ "by" (for sizes measured in bytes),
+ "1" (for count of messages per RPC)
+ """
def __init__(self, name, description, unit):
- if not (len(name) > name_max_length or all(ch in string.printable for ch in name)):
- raise ValueError(error_msg_invalid_name)
+ if len(name) > NAME_MAX_LENGTH or not all(ch in string.printable for ch in name):
+ raise ValueError(ERROR_MSG_INVALID_NAME)
self.name = name
self.description = description
self.unit = unit
def get_name(self):
+ """
+ returns the name of the measurement
+ """
return self.name
def get_description(self):
+ """
+ returns the description of the measurement
+ """
return self.description
def get_unit(self):
+ """
+ returns the unit of the measurement
+ """
return self.unit
def match(self):
"""
- todo: implement later
- will distinguish measure double from measure long
+ was applying a function (pointer) based on whether it was measure_long, measure_double
+ todo: decide if needs to be implemented
"""
- pass
-
-
-
diff --git a/opencensus/trace/measure_test.py b/opencensus/trace/measure_test.py
new file mode 100644
index 000000000..77bcc2477
--- /dev/null
+++ b/opencensus/trace/measure_test.py
@@ -0,0 +1,30 @@
+import unittest
+import measure
+
+class MeasureTest(unittest.TestCase):
+
+ def setUp(self):
+ self.measure = measure.Measure("grpc_client_sent_messages_per_rpc", "Number of messages sent in the RPC", "1")
+
+ def test_measure_name(self):
+ self.assertEqual(self.measure.get_name(), "grpc_client_sent_messages_per_rpc", "get_name() method not working")
+
+ def test_measure_description(self):
+ self.assertEqual(self.measure.get_description(), "Number of messages sent in the RPC", "get_description() method not working")
+
+ def test_measure_unit(self):
+ self.assertEqual(self.measure.get_unit(), "1", "get_unit() not working correctly")
+
+ def test_long_name_init(self):
+ with self.assertRaises(ValueError):
+ self.measure_exceeds_max_length = measure.Measure("a"*256, "some description", "1")
+
+ def test_unprintable_name_init(self):
+ with self.assertRaises(ValueError):
+ chr_list = ['0x41', '0x1B', '0x42']
+ non_printable_str = "".join([chr(int(x, 16)) for x in chr_list]) # 'AB\x1b'
+ self.measure_non_printable = measure.Measure(non_printable_str, "some description", "1")
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/opencensus/trace/rpc_m_c_test.py b/opencensus/trace/rpc_m_c_test.py
index 019f7a281..1eefdab92 100644
--- a/opencensus/trace/rpc_m_c_test.py
+++ b/opencensus/trace/rpc_m_c_test.py
@@ -5,7 +5,7 @@
# from opencensus.grpc.rpc_measure_constants import RPCMeasureConstants
-class RPCMCTests(unittest.TestCase):
+class RPCMCTest(unittest.TestCase):
def setUp(self):
self.rpc_measure = rpc_measure_constants.RPCMeasureConstants()
From eb99f84a8a0571f14cdfc0bb745ae7df24902acb Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Fri, 10 Apr 2020 00:15:59 -0400
Subject: [PATCH 37/66] pylint for measure_test.py
---
opencensus/trace/measure_test.py | 39 ++++++++++++++++++++++++++++----
1 file changed, 35 insertions(+), 4 deletions(-)
diff --git a/opencensus/trace/measure_test.py b/opencensus/trace/measure_test.py
index 77bcc2477..cc9d23e9a 100644
--- a/opencensus/trace/measure_test.py
+++ b/opencensus/trace/measure_test.py
@@ -2,24 +2,55 @@
import measure
class MeasureTest(unittest.TestCase):
+ """
+ MeasureTest has PyUnit tests for measure.py
+ """
def setUp(self):
- self.measure = measure.Measure("grpc_client_sent_messages_per_rpc", "Number of messages sent in the RPC", "1")
+ """
+ setup performed before each test
+ """
+ self.measure = measure.Measure("grpc_client_sent_messages_per_rpc",
+ "Number of messages sent in the RPC",
+ "1")
def test_measure_name(self):
- self.assertEqual(self.measure.get_name(), "grpc_client_sent_messages_per_rpc", "get_name() method not working")
+ """
+ tests measure module's get_name() method
+ """
+ self.assertEqual(self.measure.get_name(),
+ "grpc_client_sent_messages_per_rpc",
+ "get_name() method not working")
def test_measure_description(self):
- self.assertEqual(self.measure.get_description(), "Number of messages sent in the RPC", "get_description() method not working")
+ """
+ tests measure module's get_description() method
+ """
+ self.assertEqual(self.measure.get_description(),
+ "Number of messages sent in the RPC",
+ "get_description() method not working")
def test_measure_unit(self):
- self.assertEqual(self.measure.get_unit(), "1", "get_unit() not working correctly")
+ """
+ tests measure module's get_unit() method
+ """
+ self.assertEqual(self.measure.get_unit(),
+ "1",
+ "get_unit() not working correctly")
def test_long_name_init(self):
+ """
+ tests measure module's __init__() if the name str exceeds max length
+ and assert that it raises ValueError as expected
+ """
with self.assertRaises(ValueError):
self.measure_exceeds_max_length = measure.Measure("a"*256, "some description", "1")
def test_unprintable_name_init(self):
+ """
+ tests measure module's __init__() if the name str contains a non-printable ascii character
+ and assert that it raises ValueError as expected
+ """
with self.assertRaises(ValueError):
chr_list = ['0x41', '0x1B', '0x42']
non_printable_str = "".join([chr(int(x, 16)) for x in chr_list]) # 'AB\x1b'
From 6eddcf577249773a09eb49d0ba369e5bb1b9718e Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Fri, 10 Apr 2020 00:50:45 -0400
Subject: [PATCH 38/66] pylint has long line and too many inst attrib errors
---
opencensus/trace/rpc_measure_constants.py | 97 +++++++++++------------
1 file changed, 47 insertions(+), 50 deletions(-)
diff --git a/opencensus/trace/rpc_measure_constants.py b/opencensus/trace/rpc_measure_constants.py
index 7789cf578..1e2312666 100644
--- a/opencensus/trace/rpc_measure_constants.py
+++ b/opencensus/trace/rpc_measure_constants.py
@@ -1,13 +1,11 @@
from opencensus.tags import tag_key
-# from opencensus.trace import measure_double, measure_long
-# import measure_long
-# import measure_double
import measure
class RPCMeasureConstants():
"""
constants for collecting RPC stats
+ see specs in documentation for opencensus-python
"""
byte = "by"
count = "1"
@@ -19,83 +17,82 @@ def __init__(self):
todo: do I put all the RPC constant fields in here?
"""
- #client tags
+ # client tags
# gRPC server status code received, e.g. OK, CANCELLED, DEADLINE_EXCEEDED
self.grpc_client_status = tag_key.TagKey("grpc_client_status")
# Full gRPC method name, including package, service and method, e.g. google.bigtable.v2.Bigtable/CheckAndMutateRow
self.grpc_client_method = tag_key.TagKey("grpc_client_method")
- #server tags
+ # server tags
# gRPC server status code returned, e.g. OK, CANCELLED, DEADLINE_EXCEEDED
self.grpc_server_status = tag_key.TagKey("grpc_server_status")
# Full gRPC method name, including package, service and method, e.g. com.exampleapi.v4.BookshelfService/Checkout
self.grpc_server_method = tag_key.TagKey("grpc_server_method")
- #client measures
+ # client measures
self.grpc_client_sent_messages_per_rpc = measure.Measure("grpc.io/client/sent_messages_per_rpc",
- "Number of messages sent in the RPC",
- self.count)
+ "Number of messages sent in the RPC",
+ self.count)
self.grpc_client_sent_bytes_per_rpc = measure.Measure("grpc.io/client/sent_bytes_per_rpc",
- "Total bytes sent across all request messages per RPC",
- self.byte)
+ "Total bytes sent across all request messages per RPC",
+ self.byte)
self.grpc_client_received_messages_per_rpc = measure.Measure("grpc.io/client/received_messages_per_rpc",
- "Number of response messages received per RPC",
- self.count)
+ "Number of response messages received per RPC",
+ self.count)
self.grpc_client_received_bytes_per_rpc = measure.Measure("grpc.io/client/received_bytes_per_rpc",
- "Total bytes received across all response messages per RPC",
- self.byte)
+ "Total bytes received across all response messages per RPC",
+ self.byte)
self.grpc_client_roundtrip_latency = measure.Measure("grpc.io/client/roundtrip_latency",
- "Time between first byte of request sent to last byte of response received or terminal error.",
- self.millisecond)
+ "Time between first byte of request sent to last byte of response received or terminal error.",
+ self.millisecond)
self.grpc_client_server_latency = measure.Measure("grpc.io/client/server_latency",
- "Server latency in msecs",
- self.millisecond)
+ "Server latency in msecs",
+ self.millisecond)
self.grpc_client_started_rpcs = measure.Measure("grpc.io/client/started_rpcs",
- "Number of started client RPCs.",
- self.count)
+ "Number of started client RPCs.",
+ self.count)
self.grpc_client_sent_messages_per_method = measure.Measure("grpc.io/client/sent_messages_per_method",
- "Total messages sent per method.",
- self.count)
+ "Total messages sent per method.",
+ self.count)
self.grpc_client_received_messages_per_method = measure.Measure("grpc.io/client/received_messages_per_method",
- "Total messages received per method.",
- self.count)
+ "Total messages received per method.",
+ self.count)
self.grpc_client_sent_bytes_per_method = measure.Measure("grpc.io/client/sent_bytes_per_method",
- "Total bytes sent per method, recorded real-time as bytes are sent.",
- self.byte)
+ "Total bytes sent per method, recorded real-time as bytes are sent.",
+ self.byte)
self.grpc_client_received_bytes_per_method = measure.Measure("grpc.io/client/received_bytes_per_method",
- "Total bytes received per method, recorded real-time as bytes are received.",
- self.byte)
-
+ "Total bytes received per method, recorded real-time as bytes are received.",
+ self.byte)
# server measures
self.grpc_server_received_messages_per_rpc = measure.Measure("grpc.io/server/received_messages_per_rpc",
- "Number of messages received in each RPC",
- self.count)
+ "Number of messages received in each RPC",
+ self.count)
self.grpc_server_received_bytes_per_rpc = measure.Measure("grpc.io/server/received_bytes_per_rpc",
- "Total bytes received across all messages per RPC",
- self.byte)
+ "Total bytes received across all messages per RPC",
+ self.byte)
self.grpc_server_sent_messages_per_rpc = measure.Measure("grpc.io/server/sent_messages_per_rpc",
- "Number of messages sent in each RPC",
- self.count)
+ "Number of messages sent in each RPC",
+ self.count)
self.grpc_server_sent_bytes_per_rpc = measure.Measure("grpc.io/server/sent_bytes_per_rpc",
- "Total bytes sent across all response messages per RPC",
- self.byte)
+ "Total bytes sent across all response messages per RPC",
+ self.byte)
self.grpc_server_server_latency = measure.Measure("grpc.io/server/server_latency",
- "Time between first byte of request received to last byte of response sent or terminal error.",
- self.millisecond)
+ "Time between first byte of request received to last byte of response sent or terminal error.",
+ self.millisecond)
self.grpc_server_started_rpcs = measure.Measure("grpc.io/server/started_rpcs",
- "Number of started server RPCs.",
- self.count)
+ "Number of started server RPCs.",
+ self.count)
self.grpc_server_sent_messages_per_method = measure.Measure("grpc.io/server/sent_messages_per_method",
- "Total messages sent per method.",
- self.count)
+ "Total messages sent per method.",
+ self.count)
self.grpc_server_received_messages_per_method = measure.Measure("grpc.io/server/received_messages_per_method",
- "Total messages received per method.",
- self.count)
- self.grpc_server_sent_bytes_per_method = measure.Measure("grpc.io/server/sent_bytes_per_method",
- "Total bytes sent per method, recorded real-time as bytes are sent.",
- self.byte)
+ "Total messages received per method.",
+ self.count)
+ self.grpc_server_sent_bytes_per_method = measure.Measure("grpc.io/server/sent_bytes_per_method",
+ "Total bytes sent per method, recorded real-time as bytes are sent.",
+ self.byte)
self.grpc_server_received_bytes_per_method = measure.Measure("grpc.io/server/received_bytes_per_method",
- "Total bytes received per method, recorded real-time as bytes are received.",
- self.byte)
\ No newline at end of file
+ "Total bytes received per method, recorded real-time as bytes are received.",
+ self.byte)
From feef18a8b1b5c84529c56017c3b1747e94575a90 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Fri, 10 Apr 2020 00:51:43 -0400
Subject: [PATCH 39/66] fixed comment
---
opencensus/trace/rpc_measure_constants.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/opencensus/trace/rpc_measure_constants.py b/opencensus/trace/rpc_measure_constants.py
index 1e2312666..6958f89e7 100644
--- a/opencensus/trace/rpc_measure_constants.py
+++ b/opencensus/trace/rpc_measure_constants.py
@@ -13,8 +13,7 @@ class RPCMeasureConstants():
def __init__(self):
"""
- needs fixing.
- todo: do I put all the RPC constant fields in here?
+ contains all the RPC constants as in the Java implementation
"""
# client tags
From 51ec217147c7cfa248b326d6c84cd9cf25988427 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Fri, 10 Apr 2020 01:10:33 -0400
Subject: [PATCH 40/66] pylint for rpc_m_c_test
---
opencensus/trace/rpc_m_c_test.py | 103 +++++++++++++++++++++++--------
1 file changed, 76 insertions(+), 27 deletions(-)
diff --git a/opencensus/trace/rpc_m_c_test.py b/opencensus/trace/rpc_m_c_test.py
index 1eefdab92..6cf5b4e93 100644
--- a/opencensus/trace/rpc_m_c_test.py
+++ b/opencensus/trace/rpc_m_c_test.py
@@ -1,41 +1,90 @@
import unittest
-
-# from opencensus.trace import rpc_measure_constants
import rpc_measure_constants
-# from opencensus.grpc.rpc_measure_constants import RPCMeasureConstants
-
class RPCMCTest(unittest.TestCase):
+ """
+ RPCMTest tests the rpc_measure_constants module
+ """
def setUp(self):
+ """
+ sets up a test rpc_measure_constant instance
+ """
self.rpc_measure = rpc_measure_constants.RPCMeasureConstants()
def test_client_measures(self):
- self.assertEqual(self.rpc_measure.grpc_client_sent_messages_per_rpc.get_unit(), "1", "unit not set correctly on init")
- self.assertEqual(self.rpc_measure.grpc_client_sent_bytes_per_rpc.get_description(), "Total bytes sent across all request messages per RPC", "description not set correctly on init")
- self.assertEqual(self.rpc_measure.grpc_client_received_messages_per_rpc.get_name(), "grpc.io/client/received_messages_per_rpc", "name not set correctly on init")
- self.assertEqual(self.rpc_measure.grpc_client_received_bytes_per_rpc.get_unit(), "by", "unit not set correctly upon init")
- self.assertEqual(self.rpc_measure.grpc_client_roundtrip_latency.get_name(), "grpc.io/client/roundtrip_latency", "grpc_client_roundtrip_latency not initialized correctly")
- self.assertEqual(self.rpc_measure.grpc_client_server_latency.get_name(), "grpc.io/client/server_latency", "grpc_client_server_latency not set properly")
- self.assertEqual(self.rpc_measure.grpc_client_started_rpcs.get_description(), "Number of started client RPCs.", "grpc_client_started_rpcs not set properly")
- self.assertEqual(self.rpc_measure.grpc_client_sent_messages_per_method.get_unit(), "1", "grpc_client_sent_messages_per_method not set properly")
- self.assertEqual(self.rpc_measure.grpc_client_received_messages_per_method.get_name(), "grpc.io/client/received_messages_per_method", "grpc_client_received_messages_per_method not set properly")
- self.assertEqual(self.rpc_measure.grpc_client_sent_bytes_per_method.get_description(), "Total bytes sent per method, recorded real-time as bytes are sent.", "grpc_client_sent_bytes_per_method not set properly")
- self.assertEqual(self.rpc_measure.grpc_client_received_bytes_per_method.get_unit(), "by", "grpc_client_received_bytes_per_method not set properly")
-
+ """
+ tests the client measures
+ """
+ self.assertEqual(self.rpc_measure.grpc_client_sent_messages_per_rpc.get_unit(),
+ "1",
+ "unit not set correctly on init")
+ self.assertEqual(self.rpc_measure.grpc_client_sent_bytes_per_rpc.get_description(),
+ "Total bytes sent across all request messages per RPC",
+ "description not set correctly on init")
+ self.assertEqual(self.rpc_measure.grpc_client_received_messages_per_rpc.get_name(),
+ "grpc.io/client/received_messages_per_rpc",
+ "name not set correctly on init")
+ self.assertEqual(self.rpc_measure.grpc_client_received_bytes_per_rpc.get_unit(),
+ "by",
+ "unit not set correctly upon init")
+ self.assertEqual(self.rpc_measure.grpc_client_roundtrip_latency.get_name(),
+ "grpc.io/client/roundtrip_latency",
+ "grpc_client_roundtrip_latency not initialized correctly")
+ self.assertEqual(self.rpc_measure.grpc_client_server_latency.get_name(),
+ "grpc.io/client/server_latency",
+ "grpc_client_server_latency not set properly")
+ self.assertEqual(self.rpc_measure.grpc_client_started_rpcs.get_description(),
+ "Number of started client RPCs.",
+ "grpc_client_started_rpcs not set properly")
+ self.assertEqual(self.rpc_measure.grpc_client_sent_messages_per_method.get_unit(),
+ "1",
+ "grpc_client_sent_messages_per_method not set properly")
+ self.assertEqual(self.rpc_measure.grpc_client_received_messages_per_method.get_name(),
+ "grpc.io/client/received_messages_per_method",
+ "grpc_client_received_messages_per_method not set properly")
+ self.assertEqual(self.rpc_measure.grpc_client_sent_bytes_per_method.get_description(),
+ "Total bytes sent per method, recorded real-time as bytes are sent.",
+ "grpc_client_sent_bytes_per_method not set properly")
+ self.assertEqual(self.rpc_measure.grpc_client_received_bytes_per_method.get_unit(),
+ "by",
+ "grpc_client_received_bytes_per_method not set properly")
def test_server_measures(self):
- self.assertEqual(self.rpc_measure.grpc_server_received_messages_per_rpc.get_name(), "grpc.io/server/received_messages_per_rpc", "grpc_server_received_messages_per_rpc not set properly")
- self.assertEqual(self.rpc_measure.grpc_server_received_bytes_per_rpc.get_description(), "Total bytes received across all messages per RPC", "grpc_server_received_bytes_per_rpc not set properly")
- self.assertEqual(self.rpc_measure.grpc_server_sent_messages_per_rpc.get_unit(), "1", "grpc_server_sent_messages_per_rpc not set properly")
- self.assertEqual(self.rpc_measure.grpc_server_sent_bytes_per_rpc.get_name(), "grpc.io/server/sent_bytes_per_rpc", "grpc_server_sent_bytes_per_rpc not set properly")
- self.assertEqual(self.rpc_measure.grpc_server_server_latency.get_description(), "Time between first byte of request received to last byte of response sent or terminal error.", "grpc_server_server_latency not set properly")
- self.assertEqual(self.rpc_measure.grpc_server_started_rpcs.get_unit(), "1", "grpc_server_started_rpcs not set correctly")
- self.assertEqual(self.rpc_measure.grpc_server_sent_messages_per_method.get_name(), "grpc.io/server/sent_messages_per_method", "grpc_server_sent_messages_per_method not set correctly")
- self.assertEqual(self.rpc_measure.grpc_server_received_messages_per_method.get_description(), "Total messages received per method.", "grpc_server_received_messages_per_method not set correctly")
- self.assertEqual(self.rpc_measure.grpc_server_sent_bytes_per_method.get_unit(), "by", "grpc_server_sent_bytes_per_method not set correctly")
- self.assertEqual(self.rpc_measure.grpc_server_received_bytes_per_method.get_name(), "grpc.io/server/received_bytes_per_method", "grpc_server_received_bytes_per_method not set correctly")
+ """
+ tests the server measures
+ """
+ self.assertEqual(self.rpc_measure.grpc_server_received_messages_per_rpc.get_name(),
+ "grpc.io/server/received_messages_per_rpc",
+ "grpc_server_received_messages_per_rpc not set properly")
+ self.assertEqual(self.rpc_measure.grpc_server_received_bytes_per_rpc.get_description(),
+ "Total bytes received across all messages per RPC",
+ "grpc_server_received_bytes_per_rpc not set properly")
+ self.assertEqual(self.rpc_measure.grpc_server_sent_messages_per_rpc.get_unit(),
+ "1",
+ "grpc_server_sent_messages_per_rpc not set properly")
+ self.assertEqual(self.rpc_measure.grpc_server_sent_bytes_per_rpc.get_name(),
+ "grpc.io/server/sent_bytes_per_rpc",
+ "grpc_server_sent_bytes_per_rpc not set properly")
+ self.assertEqual(self.rpc_measure.grpc_server_server_latency.get_description(),
+ "Time between first byte of request received to last byte of response sent or terminal error.",
+ "grpc_server_server_latency not set properly")
+ self.assertEqual(self.rpc_measure.grpc_server_started_rpcs.get_unit(),
+ "1",
+ "grpc_server_started_rpcs not set correctly")
+ self.assertEqual(self.rpc_measure.grpc_server_sent_messages_per_method.get_name(),
+ "grpc.io/server/sent_messages_per_method",
+ "grpc_server_sent_messages_per_method not set correctly")
+ self.assertEqual(self.rpc_measure.grpc_server_received_messages_per_method.get_description(),
+ "Total messages received per method.",
+ "grpc_server_received_messages_per_method not set correctly")
+ self.assertEqual(self.rpc_measure.grpc_server_sent_bytes_per_method.get_unit(),
+ "by",
+ "grpc_server_sent_bytes_per_method not set correctly")
+ self.assertEqual(self.rpc_measure.grpc_server_received_bytes_per_method.get_name(),
+ "grpc.io/server/received_bytes_per_method",
+ "grpc_server_received_bytes_per_method not set correctly")
if __name__ == '__main__':
- unittest.main()
\ No newline at end of file
+ unittest.main()
From 28bd7bb65faa7df0d22f2a35f17ca9cd28e12ae4 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Fri, 10 Apr 2020 01:12:46 -0400
Subject: [PATCH 41/66] error message fixed for rpc_m_c_test
---
opencensus/trace/rpc_m_c_test.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/opencensus/trace/rpc_m_c_test.py b/opencensus/trace/rpc_m_c_test.py
index 6cf5b4e93..7b04ef234 100644
--- a/opencensus/trace/rpc_m_c_test.py
+++ b/opencensus/trace/rpc_m_c_test.py
@@ -18,16 +18,16 @@ def test_client_measures(self):
"""
self.assertEqual(self.rpc_measure.grpc_client_sent_messages_per_rpc.get_unit(),
"1",
- "unit not set correctly on init")
+ "grpc_client_sent_messages_per_rpc not set correctly on init")
self.assertEqual(self.rpc_measure.grpc_client_sent_bytes_per_rpc.get_description(),
"Total bytes sent across all request messages per RPC",
- "description not set correctly on init")
+ "grpc_client_sent_bytes_per_rpc not set correctly on init")
self.assertEqual(self.rpc_measure.grpc_client_received_messages_per_rpc.get_name(),
"grpc.io/client/received_messages_per_rpc",
- "name not set correctly on init")
+ "grpc_client_received_messages_per_rpc not set correctly on init")
self.assertEqual(self.rpc_measure.grpc_client_received_bytes_per_rpc.get_unit(),
"by",
- "unit not set correctly upon init")
+ "grpc_client_received_bytes_per_rpc not set correctly upon init")
self.assertEqual(self.rpc_measure.grpc_client_roundtrip_latency.get_name(),
"grpc.io/client/roundtrip_latency",
"grpc_client_roundtrip_latency not initialized correctly")
From 4003d25176adf26901790e9d728b9d59ae2a0672 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Sat, 11 Apr 2020 10:09:10 -0400
Subject: [PATCH 42/66] pylint stuff
---
opencensus/trace/rpc_measure_constants.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/opencensus/trace/rpc_measure_constants.py b/opencensus/trace/rpc_measure_constants.py
index 6958f89e7..0f0545454 100644
--- a/opencensus/trace/rpc_measure_constants.py
+++ b/opencensus/trace/rpc_measure_constants.py
@@ -17,14 +17,18 @@ def __init__(self):
"""
# client tags
+
# gRPC server status code received, e.g. OK, CANCELLED, DEADLINE_EXCEEDED
self.grpc_client_status = tag_key.TagKey("grpc_client_status")
+
# Full gRPC method name, including package, service and method, e.g. google.bigtable.v2.Bigtable/CheckAndMutateRow
self.grpc_client_method = tag_key.TagKey("grpc_client_method")
# server tags
+
# gRPC server status code returned, e.g. OK, CANCELLED, DEADLINE_EXCEEDED
self.grpc_server_status = tag_key.TagKey("grpc_server_status")
+
# Full gRPC method name, including package, service and method, e.g. com.exampleapi.v4.BookshelfService/Checkout
self.grpc_server_method = tag_key.TagKey("grpc_server_method")
From 9ef9f258e93b144e3ac9bd4257a01e623db60ecb Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 13 Apr 2020 10:38:47 -0400
Subject: [PATCH 43/66] started rpc_view_constants.py, missing mean
---
opencensus/trace/rpc_v_c_test.py | 0
opencensus/trace/rpc_view_constants.py | 28 ++++++++++++++++++++++++++
2 files changed, 28 insertions(+)
create mode 100644 opencensus/trace/rpc_v_c_test.py
create mode 100644 opencensus/trace/rpc_view_constants.py
diff --git a/opencensus/trace/rpc_v_c_test.py b/opencensus/trace/rpc_v_c_test.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/opencensus/trace/rpc_view_constants.py b/opencensus/trace/rpc_view_constants.py
new file mode 100644
index 000000000..d5de7ed44
--- /dev/null
+++ b/opencensus/trace/rpc_view_constants.py
@@ -0,0 +1,28 @@
+from opencensus.stats import aggregation
+from opencensus.stats.aggregation import CountAggregation
+from opencensus.stats.aggregation import SumAggregation
+from opencensus.stats.aggregation import DistributionAggregation
+from opencensus.stats import view
+
+class RPCViewConstants:
+ """
+ constants for exporting views on RPC stats
+ """
+
+ #buckets for distributions in defaults
+ # Common histogram bucket boundaries for bytes received/sets Views (in bytes).
+ rpc_bytes_bucket_boundaries = [0, 1024, 2048, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216,
+ 67108864, 268435456, 1073741824, 4294967296]
+ # Common histogram bucket boundaries for latency and elapsed-time Views (in milliseconds).
+ rpc_millis_bucket_boundaries = [0.0, 0.01, 0.05, 0.1, 0.3, 0.6, 0.8, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0,
+ 8.0, 10.0, 13.0, 16.0, 20.0, 25.0, 30.0, 40.0, 50.0, 65.0, 80.0, 100.0,
+ 130.0, 160.0, 200.0, 250.0, 300.0, 400.0, 500.0, 650.0, 800.0,
+ 1000.0, 2000.0, 5000.0, 10000.0, 20000.0, 50000.0, 100000.0]
+ # Common histogram bucket boundaries for request/response count Views (no unit).
+ rpc_count_bucket_boundaries = [0.0, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0,
+ 2048.0, 4096.0, 8192.0, 16384.0, 32768.0, 65536.0]
+
+ # constants
+ mean = aggregation.mean.new_aggregation_data() #needs to be implemented
+ count = CountAggregation.new_aggregation_data()
+ sum = SumAggregation.new_aggregation_data()
\ No newline at end of file
From c83b22d834a58a6365aa5b4129a2a5f6341a12cd Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 13 Apr 2020 11:07:40 -0400
Subject: [PATCH 44/66] distribution
---
opencensus/trace/rpc_view_constants.py | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/opencensus/trace/rpc_view_constants.py b/opencensus/trace/rpc_view_constants.py
index d5de7ed44..f5083f267 100644
--- a/opencensus/trace/rpc_view_constants.py
+++ b/opencensus/trace/rpc_view_constants.py
@@ -2,8 +2,10 @@
from opencensus.stats.aggregation import CountAggregation
from opencensus.stats.aggregation import SumAggregation
from opencensus.stats.aggregation import DistributionAggregation
+from opencensus.stats import bucket_boundaries
from opencensus.stats import view
+
class RPCViewConstants:
"""
constants for exporting views on RPC stats
@@ -23,6 +25,10 @@ class RPCViewConstants:
2048.0, 4096.0, 8192.0, 16384.0, 32768.0, 65536.0]
# constants
- mean = aggregation.mean.new_aggregation_data() #needs to be implemented
+ mean = aggregation.mean.new_aggregation_data() # todo needs to be implemented
count = CountAggregation.new_aggregation_data()
- sum = SumAggregation.new_aggregation_data()
\ No newline at end of file
+ sum = SumAggregation.new_aggregation_data()
+
+ distrib = DistributionAggregation(bucket_boundaries.BucketBoundaries(rpc_bytes_bucket_boundaries))
+ aggregation_with_bytes_histogram = distrib.new_aggregation_data()
+
From f554fe472509b2e4858250580cb4dc54f8a0274d Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Tue, 14 Apr 2020 18:42:40 -0400
Subject: [PATCH 45/66] added more implementation
---
opencensus/trace/rpc_view_constants.py | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/opencensus/trace/rpc_view_constants.py b/opencensus/trace/rpc_view_constants.py
index f5083f267..b26c270be 100644
--- a/opencensus/trace/rpc_view_constants.py
+++ b/opencensus/trace/rpc_view_constants.py
@@ -29,6 +29,22 @@ class RPCViewConstants:
count = CountAggregation.new_aggregation_data()
sum = SumAggregation.new_aggregation_data()
- distrib = DistributionAggregation(bucket_boundaries.BucketBoundaries(rpc_bytes_bucket_boundaries))
- aggregation_with_bytes_histogram = distrib.new_aggregation_data()
+ distrib_bytes = DistributionAggregation(bucket_boundaries.BucketBoundaries(rpc_bytes_bucket_boundaries))
+ aggregation_with_bytes_histogram = distrib_bytes.new_aggregation_data()
+
+ distrib_millis = DistributionAggregation(bucket_boundaries.BucketBoundaries(rpc_millis_bucket_boundaries))
+ aggregation_with_millis_histogram = distrib_millis.new_aggregation_data()
+
+ distrib_count = DistributionAggregation(bucket_boundaries.BucketBoundaries(rpc_count_bucket_boundaries))
+ aggregation_with_count_histogram = distrib_count.new_aggregation_data()
+
+ # todo ceaate and use Duration class
+ minute =
+ hour =
+
+ # todo
+ cumulative =
+ interval_minute =
+ interval_hour =
+
From 571490d0de5c3c0abac150188e117226c9927149 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Tue, 14 Apr 2020 19:13:46 -0400
Subject: [PATCH 46/66] commented out Mean, AggregationWindow, Duration
instances we don't need
---
opencensus/trace/rpc_view_constants.py | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/opencensus/trace/rpc_view_constants.py b/opencensus/trace/rpc_view_constants.py
index b26c270be..acf8cffd1 100644
--- a/opencensus/trace/rpc_view_constants.py
+++ b/opencensus/trace/rpc_view_constants.py
@@ -25,7 +25,7 @@ class RPCViewConstants:
2048.0, 4096.0, 8192.0, 16384.0, 32768.0, 65536.0]
# constants
- mean = aggregation.mean.new_aggregation_data() # todo needs to be implemented
+ # mean = aggregation.mean.new_aggregation_data() # todo needs to be implemented
count = CountAggregation.new_aggregation_data()
sum = SumAggregation.new_aggregation_data()
@@ -38,13 +38,13 @@ class RPCViewConstants:
distrib_count = DistributionAggregation(bucket_boundaries.BucketBoundaries(rpc_count_bucket_boundaries))
aggregation_with_count_histogram = distrib_count.new_aggregation_data()
- # todo ceaate and use Duration class
- minute =
- hour =
-
- # todo
- cumulative =
- interval_minute =
- interval_hour =
+ # # todo ceaate and use Duration class
+ # minute =
+ # hour =
+ #
+ # # todo
+ # cumulative =
+ # interval_minute =
+ # interval_hour =
From 41493aa032aa9e4a8790e391b881950fc0e120a2 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Tue, 14 Apr 2020 23:31:57 -0400
Subject: [PATCH 47/66] added client views
---
opencensus/trace/rpc_view_constants.py | 78 ++++++++++++++++++++++++++
1 file changed, 78 insertions(+)
diff --git a/opencensus/trace/rpc_view_constants.py b/opencensus/trace/rpc_view_constants.py
index acf8cffd1..69861d404 100644
--- a/opencensus/trace/rpc_view_constants.py
+++ b/opencensus/trace/rpc_view_constants.py
@@ -4,6 +4,7 @@
from opencensus.stats.aggregation import DistributionAggregation
from opencensus.stats import bucket_boundaries
from opencensus.stats import view
+import rpc_measure_constants
class RPCViewConstants:
@@ -47,4 +48,81 @@ class RPCViewConstants:
# interval_minute =
# interval_hour =
+ """
+ rpc client views:
+ The following set of views are considered minimum required to monitor client-side performance:
+ """
+ grpc_client_sent_bytes_per_rpc_view = view.View(name="grpc.io/client/sent_bytes_per_rpc",
+ description="Sent bytes per RPC",
+ columns=[rpc_measure_constants.grpc_client_method],
+ measure=rpc_measure_constants.GRPC_CLIENT_SENT_BYTES_PER_RPC,
+ aggregation=aggregation_with_bytes_histogram)
+
+ grpc_client_received_bytes_per_rpc_view = view.View(name="grpc.io/client/received_bytes_per_rpc",
+ description="Received bytes per RPC",
+ columns=[rpc_measure_constants.grpc_client_method],
+ measure=rpc_measure_constants.grpc_client_received_bytes_per_rpc,
+ aggregation=aggregation_with_bytes_histogram)
+
+ grpc_client_roundtrip_latency_view = view.View(name="grpc.io/client/roundtrip_latency",
+ description="Latency in msecs",
+ columns=[rpc_measure_constants.grpc_client_method],
+ measure=rpc_measure_constants.GRPC_CLIENT_ROUNDTRIP_LATENCY,
+ aggregation=aggregation_with_millis_histogram)
+
+ grpc_client_completed_rpc_view = view.View(name="grpc.io/client/completed_rpcs",
+ description="Number of completed client RPCs",
+ columns=[rpc_measure_constants.grpc_client_method, rpc_measure_constants.grpc_client_status],
+ measure=rpc_measure_constants.grpc_client_roundtrip_latency,
+ aggregation=count)
+
+ grpc_client_started_rpc_view = view.View(name="grpc.io/client/started_rpcs",
+ description="Number of started client RPCs",
+ columns=[rpc_measure_constants.grpc_client_method],
+ measure=rpc_measure_constants.grpc_client_started_rpcs,
+ aggregation=count)
+
+ # Extra Views: The following set of views are considered useful but not mandatory to monitor client side performance
+ grpc_client_sent_messages_per_rpc_view = view.View(name="grpc.io/client/sent_messages_per_rpc",
+ description="Number of messages sent in the RPC",
+ columns=[rpc_measure_constants.grpc_client_method],
+ measure=rpc_measure_constants.grpc_client_sent_messages_per_rpc,
+ aggregation=aggregation_with_count_histogram)
+
+ grpc_client_received_messages_per_rpc_view = view.View(name="grpc.io/client/received_messages_per_rpc",
+ description="Number of response messages received per RPC",
+ columns=[rpc_measure_constants.grpc_client_method],
+ measure=rpc_measure_constants.grpc_client_received_messages_per_rpc,
+ aggregation=aggregation_with_count_histogram)
+
+ grpc_client_server_latency_view = view.View(name="grpc.io/client/server_latency",
+ description="Server latency in msecs",
+ columns=[rpc_measure_constants.grpc_client_method],
+ measure=rpc_measure_constants.grpc_client_server_latency,
+ aggregation=aggregation_with_millis_histogram)
+
+ grpc_client_sent_messages_per_method_view = view.View(name="grpc.io/client/sent_messages_per_method",
+ description="Number of messages sent",
+ columns=[rpc_measure_constants.grpc_client_method],
+ measure=rpc_measure_constants.grpc_client_sent_messages_per_method,
+ aggregation=count)
+
+ grpc_client_received_messages_per_method_view = view.View(name="grpc.io/client/received_messages_per_method",
+ description="Number of messages received",
+ columns=[rpc_measure_constants.grpc_client_method],
+ measure=rpc_measure_constants.grpc_client_received_messages_per_method,
+ aggregation=count)
+ grpc_client_sent_bytes_per_method_view = view.View(name="grpc.io/client/sent_bytes_per_method",
+ description="Sent bytes per method",
+ columns=[rpc_measure_constants.grpc_client_method],
+ measure=rpc_measure_constants.grpc_client_sent_bytes_per_method,
+ aggregation=sum)
+
+ grpc_client_received_bytes_per_method_view = view.View(name="grpc.io/client/received_bytes_per_method",
+ description="Received bytes per method",
+ columns=[rpc_measure_constants.grpc_client_method],
+ measure=rpc_measure_constants.grpc_client_received_bytes_per_method,
+ aggregation=sum)
+
+
From 01331191014218a4d1ee55daf7551abf911eb1b6 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Wed, 15 Apr 2020 23:56:18 -0400
Subject: [PATCH 48/66] modified __init__.py to contain view import, needed for
tests
---
opencensus/trace/__init__.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/opencensus/trace/__init__.py b/opencensus/trace/__init__.py
index de8dbf1cd..17c750b36 100644
--- a/opencensus/trace/__init__.py
+++ b/opencensus/trace/__init__.py
@@ -16,6 +16,7 @@
from opencensus.trace.span import Span # original
import measure
import rpc_measure_constants
+import rpc_view_constants
__all__ = ['Span'] # modified this to add Measure
From a41fe1980054cf76a000189bd90dcbff263b6de8 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Thu, 16 Apr 2020 14:42:05 -0400
Subject: [PATCH 49/66] changed agregation instances
---
opencensus/trace/rpc_v_c_test.py | 17 +++++++++++++++++
opencensus/trace/rpc_view_constants.py | 12 +++++++++---
2 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/opencensus/trace/rpc_v_c_test.py b/opencensus/trace/rpc_v_c_test.py
index e69de29bb..f6707dcf5 100644
--- a/opencensus/trace/rpc_v_c_test.py
+++ b/opencensus/trace/rpc_v_c_test.py
@@ -0,0 +1,17 @@
+import unittest
+import rpc_view_constants
+
+class RPCVCTests(unittest.TestCase):
+ """
+ RPVMTest tests the rpc_view_constants module
+ """
+
+ def setUp(self):
+ self.rpc_view = rpc_view_constants.RPCViewConstants()
+
+ def test_client_measures(self):
+ self.assertEquals(rpc_view_constants.grpc_client_sent_bytes_per_rpc_view.get_metric_descriptor().name, "grpc.io/client/sent_bytes_per_rpc", "view not set right")
+
+
+if __name__ == '__main__':
+ unittest.main()
\ No newline at end of file
diff --git a/opencensus/trace/rpc_view_constants.py b/opencensus/trace/rpc_view_constants.py
index 69861d404..74f6c7bf5 100644
--- a/opencensus/trace/rpc_view_constants.py
+++ b/opencensus/trace/rpc_view_constants.py
@@ -27,10 +27,16 @@ class RPCViewConstants:
# constants
# mean = aggregation.mean.new_aggregation_data() # todo needs to be implemented
- count = CountAggregation.new_aggregation_data()
- sum = SumAggregation.new_aggregation_data()
+ # count_obj = CountAggregation()
+ # count = count_obj.new_aggregation_data()
+ #
+ # sum_obj = SumAggregation()
+ # sum = sum_obj.new_aggregation_data()
+
+ count = CountAggregation()
+ sum = SumAggregation()
- distrib_bytes = DistributionAggregation(bucket_boundaries.BucketBoundaries(rpc_bytes_bucket_boundaries))
+ distrib_bytes = DistributionAggregation([bucket_boundaries.BucketBoundaries(rpc_bytes_bucket_boundaries)])
aggregation_with_bytes_histogram = distrib_bytes.new_aggregation_data()
distrib_millis = DistributionAggregation(bucket_boundaries.BucketBoundaries(rpc_millis_bucket_boundaries))
From 4c22ed4ecca25502613753493177977fc619504c Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Thu, 16 Apr 2020 17:28:10 -0400
Subject: [PATCH 50/66] fixed aggregation errors
---
opencensus/stats/aggregation.py | 1 +
opencensus/trace/rpc_view_constants.py | 16 ++++++++--------
2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/opencensus/stats/aggregation.py b/opencensus/stats/aggregation.py
index acaa564f7..9d54c42e8 100644
--- a/opencensus/stats/aggregation.py
+++ b/opencensus/stats/aggregation.py
@@ -86,6 +86,7 @@ class DistributionAggregation(object):
def __init__(self, boundaries=None):
if boundaries:
+ print(boundaries)
if not all(boundaries[ii] < boundaries[ii + 1]
for ii in range(len(boundaries) - 1)):
raise ValueError("bounds must be sorted in increasing order")
diff --git a/opencensus/trace/rpc_view_constants.py b/opencensus/trace/rpc_view_constants.py
index 74f6c7bf5..7f1b33940 100644
--- a/opencensus/trace/rpc_view_constants.py
+++ b/opencensus/trace/rpc_view_constants.py
@@ -36,14 +36,14 @@ class RPCViewConstants:
count = CountAggregation()
sum = SumAggregation()
- distrib_bytes = DistributionAggregation([bucket_boundaries.BucketBoundaries(rpc_bytes_bucket_boundaries)])
- aggregation_with_bytes_histogram = distrib_bytes.new_aggregation_data()
+ bytes_bucket_boundaries = bucket_boundaries.BucketBoundaries(rpc_bytes_bucket_boundaries)
+ aggregation_with_bytes_histogram = DistributionAggregation(bytes_bucket_boundaries.boundaries)
- distrib_millis = DistributionAggregation(bucket_boundaries.BucketBoundaries(rpc_millis_bucket_boundaries))
- aggregation_with_millis_histogram = distrib_millis.new_aggregation_data()
+ millis_bucket_boundaries = bucket_boundaries.BucketBoundaries(rpc_millis_bucket_boundaries)
+ aggregation_with_millis_histogram = DistributionAggregation(millis_bucket_boundaries.boundaries)
- distrib_count = DistributionAggregation(bucket_boundaries.BucketBoundaries(rpc_count_bucket_boundaries))
- aggregation_with_count_histogram = distrib_count.new_aggregation_data()
+ count_bucket_boundaries = bucket_boundaries.BucketBoundaries(rpc_count_bucket_boundaries)
+ aggregation_with_count_histogram = DistributionAggregation(count_bucket_boundaries.boundaries)
# # todo ceaate and use Duration class
# minute =
@@ -61,7 +61,7 @@ class RPCViewConstants:
grpc_client_sent_bytes_per_rpc_view = view.View(name="grpc.io/client/sent_bytes_per_rpc",
description="Sent bytes per RPC",
columns=[rpc_measure_constants.grpc_client_method],
- measure=rpc_measure_constants.GRPC_CLIENT_SENT_BYTES_PER_RPC,
+ measure=rpc_measure_constants.grpc_client_sent_bytes_per_rpc,
aggregation=aggregation_with_bytes_histogram)
grpc_client_received_bytes_per_rpc_view = view.View(name="grpc.io/client/received_bytes_per_rpc",
@@ -73,7 +73,7 @@ class RPCViewConstants:
grpc_client_roundtrip_latency_view = view.View(name="grpc.io/client/roundtrip_latency",
description="Latency in msecs",
columns=[rpc_measure_constants.grpc_client_method],
- measure=rpc_measure_constants.GRPC_CLIENT_ROUNDTRIP_LATENCY,
+ measure=rpc_measure_constants.grpc_client_roundtrip_latency,
aggregation=aggregation_with_millis_histogram)
grpc_client_completed_rpc_view = view.View(name="grpc.io/client/completed_rpcs",
From d70d6fd005dc2df9c3a833ec6789fa85eccbdfd7 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Thu, 16 Apr 2020 18:14:44 -0400
Subject: [PATCH 51/66] fixed attribute errors for views and measures
---
opencensus/trace/rpc_measure_constants.py | 2 +-
opencensus/trace/rpc_v_c_test.py | 2 +-
opencensus/trace/rpc_view_constants.py | 52 ++++++++++++-----------
3 files changed, 29 insertions(+), 27 deletions(-)
diff --git a/opencensus/trace/rpc_measure_constants.py b/opencensus/trace/rpc_measure_constants.py
index 0f0545454..e9d7b20e0 100644
--- a/opencensus/trace/rpc_measure_constants.py
+++ b/opencensus/trace/rpc_measure_constants.py
@@ -2,7 +2,7 @@
import measure
-class RPCMeasureConstants():
+class RPCMeasureConstants:
"""
constants for collecting RPC stats
see specs in documentation for opencensus-python
diff --git a/opencensus/trace/rpc_v_c_test.py b/opencensus/trace/rpc_v_c_test.py
index f6707dcf5..9925b21a1 100644
--- a/opencensus/trace/rpc_v_c_test.py
+++ b/opencensus/trace/rpc_v_c_test.py
@@ -10,7 +10,7 @@ def setUp(self):
self.rpc_view = rpc_view_constants.RPCViewConstants()
def test_client_measures(self):
- self.assertEquals(rpc_view_constants.grpc_client_sent_bytes_per_rpc_view.get_metric_descriptor().name, "grpc.io/client/sent_bytes_per_rpc", "view not set right")
+ self.assertEquals(self.rpc_view.grpc_client_sent_bytes_per_rpc_view.get_metric_descriptor().name, "grpc.io/client/sent_bytes_per_rpc", "view not set right")
if __name__ == '__main__':
diff --git a/opencensus/trace/rpc_view_constants.py b/opencensus/trace/rpc_view_constants.py
index 7f1b33940..f16c57a8a 100644
--- a/opencensus/trace/rpc_view_constants.py
+++ b/opencensus/trace/rpc_view_constants.py
@@ -45,7 +45,9 @@ class RPCViewConstants:
count_bucket_boundaries = bucket_boundaries.BucketBoundaries(rpc_count_bucket_boundaries)
aggregation_with_count_histogram = DistributionAggregation(count_bucket_boundaries.boundaries)
- # # todo ceaate and use Duration class
+ rpc_m_c = rpc_measure_constants.RPCMeasureConstants()
+
+ # # todo create and use Duration class
# minute =
# hour =
#
@@ -60,74 +62,74 @@ class RPCViewConstants:
"""
grpc_client_sent_bytes_per_rpc_view = view.View(name="grpc.io/client/sent_bytes_per_rpc",
description="Sent bytes per RPC",
- columns=[rpc_measure_constants.grpc_client_method],
- measure=rpc_measure_constants.grpc_client_sent_bytes_per_rpc,
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_sent_bytes_per_rpc,
aggregation=aggregation_with_bytes_histogram)
grpc_client_received_bytes_per_rpc_view = view.View(name="grpc.io/client/received_bytes_per_rpc",
description="Received bytes per RPC",
- columns=[rpc_measure_constants.grpc_client_method],
- measure=rpc_measure_constants.grpc_client_received_bytes_per_rpc,
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_received_bytes_per_rpc,
aggregation=aggregation_with_bytes_histogram)
grpc_client_roundtrip_latency_view = view.View(name="grpc.io/client/roundtrip_latency",
description="Latency in msecs",
- columns=[rpc_measure_constants.grpc_client_method],
- measure=rpc_measure_constants.grpc_client_roundtrip_latency,
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_roundtrip_latency,
aggregation=aggregation_with_millis_histogram)
grpc_client_completed_rpc_view = view.View(name="grpc.io/client/completed_rpcs",
description="Number of completed client RPCs",
- columns=[rpc_measure_constants.grpc_client_method, rpc_measure_constants.grpc_client_status],
- measure=rpc_measure_constants.grpc_client_roundtrip_latency,
+ columns=[rpc_m_c.grpc_client_method, rpc_m_c.grpc_client_status],
+ measure=rpc_m_c.grpc_client_roundtrip_latency,
aggregation=count)
grpc_client_started_rpc_view = view.View(name="grpc.io/client/started_rpcs",
description="Number of started client RPCs",
- columns=[rpc_measure_constants.grpc_client_method],
- measure=rpc_measure_constants.grpc_client_started_rpcs,
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_started_rpcs,
aggregation=count)
# Extra Views: The following set of views are considered useful but not mandatory to monitor client side performance
grpc_client_sent_messages_per_rpc_view = view.View(name="grpc.io/client/sent_messages_per_rpc",
description="Number of messages sent in the RPC",
- columns=[rpc_measure_constants.grpc_client_method],
- measure=rpc_measure_constants.grpc_client_sent_messages_per_rpc,
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_sent_messages_per_rpc,
aggregation=aggregation_with_count_histogram)
grpc_client_received_messages_per_rpc_view = view.View(name="grpc.io/client/received_messages_per_rpc",
description="Number of response messages received per RPC",
- columns=[rpc_measure_constants.grpc_client_method],
- measure=rpc_measure_constants.grpc_client_received_messages_per_rpc,
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_received_messages_per_rpc,
aggregation=aggregation_with_count_histogram)
grpc_client_server_latency_view = view.View(name="grpc.io/client/server_latency",
description="Server latency in msecs",
- columns=[rpc_measure_constants.grpc_client_method],
- measure=rpc_measure_constants.grpc_client_server_latency,
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_server_latency,
aggregation=aggregation_with_millis_histogram)
grpc_client_sent_messages_per_method_view = view.View(name="grpc.io/client/sent_messages_per_method",
description="Number of messages sent",
- columns=[rpc_measure_constants.grpc_client_method],
- measure=rpc_measure_constants.grpc_client_sent_messages_per_method,
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_sent_messages_per_method,
aggregation=count)
grpc_client_received_messages_per_method_view = view.View(name="grpc.io/client/received_messages_per_method",
description="Number of messages received",
- columns=[rpc_measure_constants.grpc_client_method],
- measure=rpc_measure_constants.grpc_client_received_messages_per_method,
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_received_messages_per_method,
aggregation=count)
grpc_client_sent_bytes_per_method_view = view.View(name="grpc.io/client/sent_bytes_per_method",
description="Sent bytes per method",
- columns=[rpc_measure_constants.grpc_client_method],
- measure=rpc_measure_constants.grpc_client_sent_bytes_per_method,
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_sent_bytes_per_method,
aggregation=sum)
grpc_client_received_bytes_per_method_view = view.View(name="grpc.io/client/received_bytes_per_method",
description="Received bytes per method",
- columns=[rpc_measure_constants.grpc_client_method],
- measure=rpc_measure_constants.grpc_client_received_bytes_per_method,
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_received_bytes_per_method,
aggregation=sum)
From 2b5738ce739e6e28dbe0013f34a9fa97efb58d6a Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Thu, 16 Apr 2020 20:19:00 -0400
Subject: [PATCH 52/66] added tests for client views
---
opencensus/trace/rpc_v_c_test.py | 40 +++++++++++++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)
diff --git a/opencensus/trace/rpc_v_c_test.py b/opencensus/trace/rpc_v_c_test.py
index 9925b21a1..a3fa65c05 100644
--- a/opencensus/trace/rpc_v_c_test.py
+++ b/opencensus/trace/rpc_v_c_test.py
@@ -1,5 +1,6 @@
import unittest
import rpc_view_constants
+from opencensus.metrics.export.metric_descriptor import MetricDescriptorType
class RPCVCTests(unittest.TestCase):
"""
@@ -10,7 +11,44 @@ def setUp(self):
self.rpc_view = rpc_view_constants.RPCViewConstants()
def test_client_measures(self):
- self.assertEquals(self.rpc_view.grpc_client_sent_bytes_per_rpc_view.get_metric_descriptor().name, "grpc.io/client/sent_bytes_per_rpc", "view not set right")
+ self.assertEqual(self.rpc_view.grpc_client_sent_bytes_per_rpc_view.name,
+ "grpc.io/client/sent_bytes_per_rpc",
+ "grpc_client_sent_bytes_per_rpc_view not set correctly")
+ self.assertEqual(self.rpc_view.grpc_client_received_bytes_per_rpc_view.description,
+ "Received bytes per RPC",
+ "grpc_client_received_bytes_per_rpc_view not set correctly")
+ self.assertEqual(self.rpc_view.grpc_client_roundtrip_latency_view.measure.get_name(),
+ "grpc.io/client/roundtrip_latency",
+ "grpc_client_roundtrip_latency_view not set correctly")
+ self.assertEqual(self.rpc_view.grpc_client_completed_rpc_view.measure.get_name(),
+ "grpc.io/client/roundtrip_latency",
+ "grpc_client_completed_rpc_view not set correctly")
+ self.assertEqual(self.rpc_view.grpc_client_started_rpc_view.description,
+ "Number of started client RPCs",
+ "grpc_client_started_rpc_view not set correctly")
+ self.assertEqual(self.rpc_view.grpc_client_sent_messages_per_rpc_view.name,
+ "grpc.io/client/sent_messages_per_rpc",
+ "grpc_client_sent_messages_per_rpc_view not set correctly")
+ self.assertEqual(self.rpc_view.grpc_client_received_messages_per_rpc_view.description,
+ "Number of response messages received per RPC",
+ "grpc_client_received_messages_per_rpc_view not set correctly")
+ self.assertEqual(self.rpc_view.grpc_client_server_latency_view.measure.get_unit(),
+ "ms",
+ "grpc_client_server_latency_view not set correctly")
+ self.assertEqual(self.rpc_view.grpc_client_sent_messages_per_method_view.name,
+ "grpc.io/client/sent_messages_per_method",
+ "grpc_client_sent_messages_per_method_view not set correctly")
+ self.assertEqual(self.rpc_view.grpc_client_received_messages_per_method_view.description,
+ "Number of messages received",
+ "grpc_client_received_messages_per_method_view not set correctly")
+ self.assertEqual(self.rpc_view.grpc_client_sent_bytes_per_method_view.measure.get_unit(),
+ "by",
+ "grpc_client_sent_bytes_per_method_view not set correctly")
+ self.assertEqual(self.rpc_view.grpc_client_received_bytes_per_method_view.name,
+ "grpc.io/client/received_bytes_per_method",
+ "grpc_client_received_bytes_per_method_view not set correctly")
+
+
if __name__ == '__main__':
From 94bbc0d63305f1752108c8dc7b2f72ebff59e472 Mon Sep 17 00:00:00 2001
From: Aasiyah Feisal
Date: Fri, 17 Apr 2020 14:12:23 -0400
Subject: [PATCH 53/66] Added server views to view constants
---
opencensus/trace/rpc_view_constants.py | 73 +++++++++++++++++++++++++-
1 file changed, 71 insertions(+), 2 deletions(-)
diff --git a/opencensus/trace/rpc_view_constants.py b/opencensus/trace/rpc_view_constants.py
index f16c57a8a..47861b9ee 100644
--- a/opencensus/trace/rpc_view_constants.py
+++ b/opencensus/trace/rpc_view_constants.py
@@ -132,5 +132,74 @@ class RPCViewConstants:
measure=rpc_m_c.grpc_client_received_bytes_per_method,
aggregation=sum)
-
-
+ """
+ rpc server views:
+ The following set of views are considered minimum required to monitor server-side performance:
+ """
+ grpc_server_received_bytes_per_rpc = view.View(name="grpc.io/server/received_bytes_per_rpc",
+ description="Received bytes per RPC",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_received_bytes_per_rpc,
+ aggregation=sum)
+
+ grpc_server_sent_bytes_per_rpc = view.View(name="grpc.io/server/sent_bytes_per_rpc",
+ description="Sent bytes per RPC",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_sent_bytes_per_method,
+ aggregation=sum)
+
+ grpc_server_server_latency = view.View(name="grpc.io/server/server_latency",
+ description="Latency in msecs",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_server_latency,
+ aggregation=aggregation_with_bytes_histogram) # Aggregation type listed is actually mean
+
+ grpc_server_completed_rpcs = view.View(name="grpc.io/server/completed_rpcs",
+ description="Number of completed server RPCs",
+ columns=[rpc_m_c.grpc_server_method, rpc_m_c.grpc_server_status],
+ measure=rpc_m_c.grpc_server_server_latency,
+ aggregation=count)
+
+ grpc_server_started_rpcs = view.View(name="grpc.io/server/started_rpcs",
+ description="Number of started server RPCs",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_started_rpcs,
+ aggregation=count)
+
+
+ # Extra Views: The following set of views are considered useful but not mandatory to monitor server-side performance
+ grpc_server_received_messages_per_rpc = view.View(name="grpc.io/server/received_messages_per_rpc",
+ description="Number of response messages received in each RPC",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_received_messages_per_rpc,
+ aggregation=aggregation_with_count_histogram)
+
+ grpc_server_sent_messages_per_rpc = view.View(name="grpc.io/server/sent_messages_per_rpc",
+ description="Number of messages sent in each RPC",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_sent_messages_per_rpc,
+ aggregation=aggregation_with_count_histogram)
+
+ grpc_server_sent_messages_per_method = view.View(name="grpc.io/server/sent_messages_per_method",
+ description="Number of messages sent",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_sent_messages_per_method,
+ aggregation=count)
+
+ grpc_server_received_messages_per_method = view.View(name="grpc.io/server/received_messages_per_method",
+ description="Number of messages received",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_received_messages_per_method,
+ aggregation=count)
+
+ grpc_server_sent_bytes_per_method = view.View(name="grpc.io/server/sent_bytes_per_method",
+ description="Sent bytes per method",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_sent_bytes_per_method,
+ aggregation=sum)
+
+ grpc_server_received_bytes_per_method = view.View(name="grpc.io/server/received_bytes_per_method",
+ description="Received bytes per method",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_received_bytes_per_method,
+ aggregation=sum)
From 4e4391723a2e58e60ade266c7e2142e34c286586 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 20 Apr 2020 10:02:30 -0400
Subject: [PATCH 54/66] pylint changes
---
opencensus/trace/rpc_v_c_test.py | 4 +---
opencensus/trace/rpc_view_constants.py | 7 -------
2 files changed, 1 insertion(+), 10 deletions(-)
diff --git a/opencensus/trace/rpc_v_c_test.py b/opencensus/trace/rpc_v_c_test.py
index a3fa65c05..871e81482 100644
--- a/opencensus/trace/rpc_v_c_test.py
+++ b/opencensus/trace/rpc_v_c_test.py
@@ -49,7 +49,5 @@ def test_client_measures(self):
"grpc_client_received_bytes_per_method_view not set correctly")
-
-
if __name__ == '__main__':
- unittest.main()
\ No newline at end of file
+ unittest.main()
diff --git a/opencensus/trace/rpc_view_constants.py b/opencensus/trace/rpc_view_constants.py
index f16c57a8a..1595707ed 100644
--- a/opencensus/trace/rpc_view_constants.py
+++ b/opencensus/trace/rpc_view_constants.py
@@ -25,13 +25,6 @@ class RPCViewConstants:
rpc_count_bucket_boundaries = [0.0, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0,
2048.0, 4096.0, 8192.0, 16384.0, 32768.0, 65536.0]
- # constants
- # mean = aggregation.mean.new_aggregation_data() # todo needs to be implemented
- # count_obj = CountAggregation()
- # count = count_obj.new_aggregation_data()
- #
- # sum_obj = SumAggregation()
- # sum = sum_obj.new_aggregation_data()
count = CountAggregation()
sum = SumAggregation()
From 68561c27e95900c27c6dea8aac0089d10be941d1 Mon Sep 17 00:00:00 2001
From: Aasiyah Feisal
Date: Mon, 20 Apr 2020 10:35:10 -0400
Subject: [PATCH 55/66] Added tests for server views within view consstants
---
opencensus/trace/measure.py | 4 +--
opencensus/trace/rpc_v_c_test.py | 44 ++++++++++++++++++++++++++
opencensus/trace/rpc_view_constants.py | 2 +-
3 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/opencensus/trace/measure.py b/opencensus/trace/measure.py
index 695ee721c..b8eeb9702 100755
--- a/opencensus/trace/measure.py
+++ b/opencensus/trace/measure.py
@@ -2,8 +2,8 @@
import string
NAME_MAX_LENGTH = 255
-ERROR_MSG_INVALID_NAME = f"Name should be a ASCII string with a length " \
- f"no greater than {NAME_MAX_LENGTH} characters."
+ERROR_MSG_INVALID_NAME = "Name should be a ASCII string with a length " \
+ "no greater than {NAME_MAX_LENGTH} characters."
class Measure:
diff --git a/opencensus/trace/rpc_v_c_test.py b/opencensus/trace/rpc_v_c_test.py
index a3fa65c05..f6cd84f90 100644
--- a/opencensus/trace/rpc_v_c_test.py
+++ b/opencensus/trace/rpc_v_c_test.py
@@ -48,8 +48,52 @@ def test_client_measures(self):
"grpc.io/client/received_bytes_per_method",
"grpc_client_received_bytes_per_method_view not set correctly")
+ def test_server_measures(self):
+ # Test default server views
+ self.assertEqual(self.rpc_view.grpc_server_received_bytes_per_rpc.name,
+ "grpc.io/server/received_bytes_per_rpc",
+ "grpc_server_received_bytes_per_rpc view not set correctly")
+ self.assertEqual(self.rpc_view.grpc_server_sent_bytes_per_rpc.name,
+ "grpc.io/server/sent_bytes_per_rpc",
+ "grpc_server_sent_bytes_per_rpc view not set correctly")
+ self.assertEqual(self.rpc_view.grpc_server_server_latency.name,
+ "grpc.io/server/server_latency",
+ "grpc_server_server_latency view not set correctly")
+
+ self.assertEqual(self.rpc_view.grpc_server_completed_rpcs.name,
+ "grpc.io/server/completed_rpcs",
+ "grpc_server_completed_rpcs view not set correctly")
+
+ self.assertEqual(self.rpc_view.grpc_server_started_rpcs.name,
+ "grpc.io/server/started_rpcs",
+ "grpc_server_started_rpcs view not set correctly")
+
+ # Test extra server views
+ self.assertEqual(self.rpc_view.grpc_server_received_messages_per_rpc.name,
+ "grpc.io/server/received_messages_per_rpc",
+ "grpc_server_received_messages_per_rpc view not set correctly")
+
+ self.assertEqual(self.rpc_view.grpc_server_sent_messages_per_rpc.name,
+ "grpc.io/server/sent_messages_per_rpc",
+ "grpc_server_sent_messages_per_rpc view not set correctly")
+
+ self.assertEqual(self.rpc_view.grpc_server_sent_messages_per_method.name,
+ "grpc.io/server/sent_messages_per_method",
+ "grpc_server_sent_messages_per_method view not set correctly")
+
+ self.assertEqual(self.rpc_view.grpc_server_received_messages_per_method.name,
+ "grpc.io/server/received_messages_per_method",
+ "grpc_server_received_messages_per_method view not set correctly")
+
+ self.assertEqual(self.rpc_view.grpc_server_sent_bytes_per_method.name,
+ "grpc.io/server/sent_bytes_per_method",
+ "grpc_server_sent_bytes_per_method view not set correctly")
+
+ self.assertEqual(self.rpc_view.grpc_server_received_bytes_per_method.name,
+ "grpc.io/server/received_bytes_per_method",
+ "grpc_server_received_bytes_per_method view not set correctly")
if __name__ == '__main__':
unittest.main()
\ No newline at end of file
diff --git a/opencensus/trace/rpc_view_constants.py b/opencensus/trace/rpc_view_constants.py
index 47861b9ee..d70e65d53 100644
--- a/opencensus/trace/rpc_view_constants.py
+++ b/opencensus/trace/rpc_view_constants.py
@@ -152,7 +152,7 @@ class RPCViewConstants:
description="Latency in msecs",
columns=[rpc_m_c.grpc_server_method],
measure=rpc_m_c.grpc_server_server_latency,
- aggregation=aggregation_with_bytes_histogram) # Aggregation type listed is actually mean
+ aggregation=aggregation_with_millis_histogram)
grpc_server_completed_rpcs = view.View(name="grpc.io/server/completed_rpcs",
description="Number of completed server RPCs",
From 3494bf6fce1809b927336bb9da3cd87c2c49d452 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 20 Apr 2020 10:42:17 -0400
Subject: [PATCH 56/66] changed measure fields to be private
---
opencensus/trace/measure.py | 58 +++++++++++++++++++++-----------
opencensus/trace/measure_test.py | 6 ++--
opencensus/trace/rpc_m_c_test.py | 42 +++++++++++------------
3 files changed, 62 insertions(+), 44 deletions(-)
diff --git a/opencensus/trace/measure.py b/opencensus/trace/measure.py
index 695ee721c..73a09f8dd 100755
--- a/opencensus/trace/measure.py
+++ b/opencensus/trace/measure.py
@@ -26,30 +26,48 @@ class Measure:
def __init__(self, name, description, unit):
if len(name) > NAME_MAX_LENGTH or not all(ch in string.printable for ch in name):
raise ValueError(ERROR_MSG_INVALID_NAME)
- self.name = name
- self.description = description
- self.unit = unit
+ self._name = name
+ self._description = description
+ self._unit = unit
- def get_name(self):
+ @property
+ def name(self):
"""
- returns the name of the measurement
+ the name of the measure
"""
- return self.name
+ return self._name
- def get_description(self):
+ @property
+ def description(self):
"""
- returns the description of the measurement
+ the description of the measure
"""
- return self.description
+ return self._description
- def get_unit(self):
- """
- returns the unit of the measurement
- """
- return self.unit
-
- def match(self):
- """
- was applying a function (pointer) based on whether it was measure_long, measure_double
- todo: decide if needs to be implemented
- """
+ @property
+ def unit(self):
+ return self._unit
+ #
+ # def get_name(self):
+ # """
+ # returns the name of the measurement
+ # """
+ # return self.name
+ #
+ # def get_description(self):
+ # """
+ # returns the description of the measurement
+ # """
+ # return self.description
+ #
+ # def get_unit(self):
+ # """
+ # returns the unit of the measurement
+ # """
+ # return self.unit
+ #
+ # def match(self):
+ # """
+ # was applying a function (pointer) based on whether it was measure_long, measure_double
+ # todo: decide if needs to be implemented
+ # """
diff --git a/opencensus/trace/measure_test.py b/opencensus/trace/measure_test.py
index cc9d23e9a..95aa2e2ed 100644
--- a/opencensus/trace/measure_test.py
+++ b/opencensus/trace/measure_test.py
@@ -18,7 +18,7 @@ def test_measure_name(self):
"""
tests measure module's get_name() method
"""
- self.assertEqual(self.measure.get_name(),
+ self.assertEqual(self.measure.name,
"grpc_client_sent_messages_per_rpc",
"get_name() method not working")
@@ -26,7 +26,7 @@ def test_measure_description(self):
"""
tests measure module's get_description() method
"""
- self.assertEqual(self.measure.get_description(),
+ self.assertEqual(self.measure.description,
"Number of messages sent in the RPC",
"get_description() method not working")
@@ -34,7 +34,7 @@ def test_measure_unit(self):
"""
tests measure module's get_unit() method
"""
- self.assertEqual(self.measure.get_unit(),
+ self.assertEqual(self.measure.unit,
"1",
"get_unit() not working correctly")
diff --git a/opencensus/trace/rpc_m_c_test.py b/opencensus/trace/rpc_m_c_test.py
index 7b04ef234..3b4fc1ba2 100644
--- a/opencensus/trace/rpc_m_c_test.py
+++ b/opencensus/trace/rpc_m_c_test.py
@@ -16,37 +16,37 @@ def test_client_measures(self):
"""
tests the client measures
"""
- self.assertEqual(self.rpc_measure.grpc_client_sent_messages_per_rpc.get_unit(),
+ self.assertEqual(self.rpc_measure.grpc_client_sent_messages_per_rpc.unit,
"1",
"grpc_client_sent_messages_per_rpc not set correctly on init")
- self.assertEqual(self.rpc_measure.grpc_client_sent_bytes_per_rpc.get_description(),
+ self.assertEqual(self.rpc_measure.grpc_client_sent_bytes_per_rpc.description,
"Total bytes sent across all request messages per RPC",
"grpc_client_sent_bytes_per_rpc not set correctly on init")
- self.assertEqual(self.rpc_measure.grpc_client_received_messages_per_rpc.get_name(),
+ self.assertEqual(self.rpc_measure.grpc_client_received_messages_per_rpc.name,
"grpc.io/client/received_messages_per_rpc",
"grpc_client_received_messages_per_rpc not set correctly on init")
- self.assertEqual(self.rpc_measure.grpc_client_received_bytes_per_rpc.get_unit(),
+ self.assertEqual(self.rpc_measure.grpc_client_received_bytes_per_rpc.unit,
"by",
"grpc_client_received_bytes_per_rpc not set correctly upon init")
- self.assertEqual(self.rpc_measure.grpc_client_roundtrip_latency.get_name(),
+ self.assertEqual(self.rpc_measure.grpc_client_roundtrip_latency.name,
"grpc.io/client/roundtrip_latency",
"grpc_client_roundtrip_latency not initialized correctly")
- self.assertEqual(self.rpc_measure.grpc_client_server_latency.get_name(),
+ self.assertEqual(self.rpc_measure.grpc_client_server_latency.name,
"grpc.io/client/server_latency",
"grpc_client_server_latency not set properly")
- self.assertEqual(self.rpc_measure.grpc_client_started_rpcs.get_description(),
+ self.assertEqual(self.rpc_measure.grpc_client_started_rpcs.description,
"Number of started client RPCs.",
"grpc_client_started_rpcs not set properly")
- self.assertEqual(self.rpc_measure.grpc_client_sent_messages_per_method.get_unit(),
+ self.assertEqual(self.rpc_measure.grpc_client_sent_messages_per_method.unit,
"1",
"grpc_client_sent_messages_per_method not set properly")
- self.assertEqual(self.rpc_measure.grpc_client_received_messages_per_method.get_name(),
+ self.assertEqual(self.rpc_measure.grpc_client_received_messages_per_method.name,
"grpc.io/client/received_messages_per_method",
"grpc_client_received_messages_per_method not set properly")
- self.assertEqual(self.rpc_measure.grpc_client_sent_bytes_per_method.get_description(),
+ self.assertEqual(self.rpc_measure.grpc_client_sent_bytes_per_method.description,
"Total bytes sent per method, recorded real-time as bytes are sent.",
"grpc_client_sent_bytes_per_method not set properly")
- self.assertEqual(self.rpc_measure.grpc_client_received_bytes_per_method.get_unit(),
+ self.assertEqual(self.rpc_measure.grpc_client_received_bytes_per_method.unit,
"by",
"grpc_client_received_bytes_per_method not set properly")
@@ -54,34 +54,34 @@ def test_server_measures(self):
"""
tests the server measures
"""
- self.assertEqual(self.rpc_measure.grpc_server_received_messages_per_rpc.get_name(),
+ self.assertEqual(self.rpc_measure.grpc_server_received_messages_per_rpc.name,
"grpc.io/server/received_messages_per_rpc",
"grpc_server_received_messages_per_rpc not set properly")
- self.assertEqual(self.rpc_measure.grpc_server_received_bytes_per_rpc.get_description(),
+ self.assertEqual(self.rpc_measure.grpc_server_received_bytes_per_rpc.description,
"Total bytes received across all messages per RPC",
"grpc_server_received_bytes_per_rpc not set properly")
- self.assertEqual(self.rpc_measure.grpc_server_sent_messages_per_rpc.get_unit(),
+ self.assertEqual(self.rpc_measure.grpc_server_sent_messages_per_rpc.unit,
"1",
"grpc_server_sent_messages_per_rpc not set properly")
- self.assertEqual(self.rpc_measure.grpc_server_sent_bytes_per_rpc.get_name(),
+ self.assertEqual(self.rpc_measure.grpc_server_sent_bytes_per_rpc.name,
"grpc.io/server/sent_bytes_per_rpc",
"grpc_server_sent_bytes_per_rpc not set properly")
- self.assertEqual(self.rpc_measure.grpc_server_server_latency.get_description(),
+ self.assertEqual(self.rpc_measure.grpc_server_server_latency.description,
"Time between first byte of request received to last byte of response sent or terminal error.",
"grpc_server_server_latency not set properly")
- self.assertEqual(self.rpc_measure.grpc_server_started_rpcs.get_unit(),
+ self.assertEqual(self.rpc_measure.grpc_server_started_rpcs.unit,
"1",
"grpc_server_started_rpcs not set correctly")
- self.assertEqual(self.rpc_measure.grpc_server_sent_messages_per_method.get_name(),
+ self.assertEqual(self.rpc_measure.grpc_server_sent_messages_per_method.name,
"grpc.io/server/sent_messages_per_method",
"grpc_server_sent_messages_per_method not set correctly")
- self.assertEqual(self.rpc_measure.grpc_server_received_messages_per_method.get_description(),
+ self.assertEqual(self.rpc_measure.grpc_server_received_messages_per_method.description,
"Total messages received per method.",
"grpc_server_received_messages_per_method not set correctly")
- self.assertEqual(self.rpc_measure.grpc_server_sent_bytes_per_method.get_unit(),
+ self.assertEqual(self.rpc_measure.grpc_server_sent_bytes_per_method.unit,
"by",
"grpc_server_sent_bytes_per_method not set correctly")
- self.assertEqual(self.rpc_measure.grpc_server_received_bytes_per_method.get_name(),
+ self.assertEqual(self.rpc_measure.grpc_server_received_bytes_per_method.name,
"grpc.io/server/received_bytes_per_method",
"grpc_server_received_bytes_per_method not set correctly")
From e182e37eb8e1c7f0a027d3a31bc3d6728cd9a3b4 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 20 Apr 2020 10:48:48 -0400
Subject: [PATCH 57/66] fixed merge issues that had persisted somehow
---
opencensus/trace/rpc_v_c_test.py | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/opencensus/trace/rpc_v_c_test.py b/opencensus/trace/rpc_v_c_test.py
index c3d9bf242..f1eca08d8 100644
--- a/opencensus/trace/rpc_v_c_test.py
+++ b/opencensus/trace/rpc_v_c_test.py
@@ -17,10 +17,10 @@ def test_client_measures(self):
self.assertEqual(self.rpc_view.grpc_client_received_bytes_per_rpc_view.description,
"Received bytes per RPC",
"grpc_client_received_bytes_per_rpc_view not set correctly")
- self.assertEqual(self.rpc_view.grpc_client_roundtrip_latency_view.measure.get_name(),
+ self.assertEqual(self.rpc_view.grpc_client_roundtrip_latency_view.measure.name,
"grpc.io/client/roundtrip_latency",
"grpc_client_roundtrip_latency_view not set correctly")
- self.assertEqual(self.rpc_view.grpc_client_completed_rpc_view.measure.get_name(),
+ self.assertEqual(self.rpc_view.grpc_client_completed_rpc_view.measure.name,
"grpc.io/client/roundtrip_latency",
"grpc_client_completed_rpc_view not set correctly")
self.assertEqual(self.rpc_view.grpc_client_started_rpc_view.description,
@@ -32,7 +32,7 @@ def test_client_measures(self):
self.assertEqual(self.rpc_view.grpc_client_received_messages_per_rpc_view.description,
"Number of response messages received per RPC",
"grpc_client_received_messages_per_rpc_view not set correctly")
- self.assertEqual(self.rpc_view.grpc_client_server_latency_view.measure.get_unit(),
+ self.assertEqual(self.rpc_view.grpc_client_server_latency_view.measure.unit,
"ms",
"grpc_client_server_latency_view not set correctly")
self.assertEqual(self.rpc_view.grpc_client_sent_messages_per_method_view.name,
@@ -41,7 +41,7 @@ def test_client_measures(self):
self.assertEqual(self.rpc_view.grpc_client_received_messages_per_method_view.description,
"Number of messages received",
"grpc_client_received_messages_per_method_view not set correctly")
- self.assertEqual(self.rpc_view.grpc_client_sent_bytes_per_method_view.measure.get_unit(),
+ self.assertEqual(self.rpc_view.grpc_client_sent_bytes_per_method_view.measure.unit,
"by",
"grpc_client_sent_bytes_per_method_view not set correctly")
self.assertEqual(self.rpc_view.grpc_client_received_bytes_per_method_view.name,
@@ -54,7 +54,6 @@ def test_server_measures(self):
"grpc.io/server/received_bytes_per_rpc",
"grpc_server_received_bytes_per_rpc view not set correctly")
-<<<<<<< HEAD
self.assertEqual(self.rpc_view.grpc_server_sent_bytes_per_rpc.name,
"grpc.io/server/sent_bytes_per_rpc",
"grpc_server_sent_bytes_per_rpc view not set correctly")
@@ -96,7 +95,6 @@ def test_server_measures(self):
"grpc.io/server/received_bytes_per_method",
"grpc_server_received_bytes_per_method view not set correctly")
-=======
->>>>>>> 75179e5b9254b5296c4771146b5d3d00d861a813
+
if __name__ == '__main__':
unittest.main()
From 5425325e2de80beb1006a01dc6672790beb71a96 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 20 Apr 2020 15:23:58 -0400
Subject: [PATCH 58/66] fixed pylint errors, rpc_m_c
---
opencensus/trace/measure.py | 25 +---
opencensus/trace/rpc_measure_constants.py | 173 ++++++++++++++--------
2 files changed, 109 insertions(+), 89 deletions(-)
diff --git a/opencensus/trace/measure.py b/opencensus/trace/measure.py
index 7ca0e531c..2c1521330 100755
--- a/opencensus/trace/measure.py
+++ b/opencensus/trace/measure.py
@@ -47,27 +47,4 @@ def description(self):
@property
def unit(self):
return self._unit
- #
- # def get_name(self):
- # """
- # returns the name of the measurement
- # """
- # return self.name
- #
- # def get_description(self):
- # """
- # returns the description of the measurement
- # """
- # return self.description
- #
- # def get_unit(self):
- # """
- # returns the unit of the measurement
- # """
- # return self.unit
- #
- # def match(self):
- # """
- # was applying a function (pointer) based on whether it was measure_long, measure_double
- # todo: decide if needs to be implemented
- # """
+
diff --git a/opencensus/trace/rpc_measure_constants.py b/opencensus/trace/rpc_measure_constants.py
index e9d7b20e0..9bd662b25 100644
--- a/opencensus/trace/rpc_measure_constants.py
+++ b/opencensus/trace/rpc_measure_constants.py
@@ -21,7 +21,8 @@ def __init__(self):
# gRPC server status code received, e.g. OK, CANCELLED, DEADLINE_EXCEEDED
self.grpc_client_status = tag_key.TagKey("grpc_client_status")
- # Full gRPC method name, including package, service and method, e.g. google.bigtable.v2.Bigtable/CheckAndMutateRow
+ # Full gRPC method name, including package, service and method,
+ # e.g. google.bigtable.v2.Bigtable/CheckAndMutateRow
self.grpc_client_method = tag_key.TagKey("grpc_client_method")
# server tags
@@ -29,73 +30,115 @@ def __init__(self):
# gRPC server status code returned, e.g. OK, CANCELLED, DEADLINE_EXCEEDED
self.grpc_server_status = tag_key.TagKey("grpc_server_status")
- # Full gRPC method name, including package, service and method, e.g. com.exampleapi.v4.BookshelfService/Checkout
+ # Full gRPC method name, including package, service and method,
+ # e.g. com.exampleapi.v4.BookshelfService/Checkout
self.grpc_server_method = tag_key.TagKey("grpc_server_method")
# client measures
- self.grpc_client_sent_messages_per_rpc = measure.Measure("grpc.io/client/sent_messages_per_rpc",
- "Number of messages sent in the RPC",
- self.count)
- self.grpc_client_sent_bytes_per_rpc = measure.Measure("grpc.io/client/sent_bytes_per_rpc",
- "Total bytes sent across all request messages per RPC",
- self.byte)
- self.grpc_client_received_messages_per_rpc = measure.Measure("grpc.io/client/received_messages_per_rpc",
- "Number of response messages received per RPC",
- self.count)
- self.grpc_client_received_bytes_per_rpc = measure.Measure("grpc.io/client/received_bytes_per_rpc",
- "Total bytes received across all response messages per RPC",
- self.byte)
- self.grpc_client_roundtrip_latency = measure.Measure("grpc.io/client/roundtrip_latency",
- "Time between first byte of request sent to last byte of response received or terminal error.",
- self.millisecond)
- self.grpc_client_server_latency = measure.Measure("grpc.io/client/server_latency",
- "Server latency in msecs",
- self.millisecond)
- self.grpc_client_started_rpcs = measure.Measure("grpc.io/client/started_rpcs",
- "Number of started client RPCs.",
- self.count)
- self.grpc_client_sent_messages_per_method = measure.Measure("grpc.io/client/sent_messages_per_method",
- "Total messages sent per method.",
- self.count)
- self.grpc_client_received_messages_per_method = measure.Measure("grpc.io/client/received_messages_per_method",
- "Total messages received per method.",
- self.count)
- self.grpc_client_sent_bytes_per_method = measure.Measure("grpc.io/client/sent_bytes_per_method",
- "Total bytes sent per method, recorded real-time as bytes are sent.",
- self.byte)
- self.grpc_client_received_bytes_per_method = measure.Measure("grpc.io/client/received_bytes_per_method",
- "Total bytes received per method, recorded real-time as bytes are received.",
- self.byte)
+ self.grpc_client_sent_messages_per_rpc = measure.Measure(
+ name="grpc.io/client/sent_messages_per_rpc",
+ description="Number of messages sent in the RPC",
+ unit=self.count)
+
+ self.grpc_client_sent_bytes_per_rpc = measure.Measure(
+ name="grpc.io/client/sent_bytes_per_rpc",
+ description="Total bytes sent across all request messages per RPC",
+ unit=self.byte)
+
+ self.grpc_client_received_messages_per_rpc = measure.Measure(
+ name="grpc.io/client/received_messages_per_rpc",
+ description="Number of response messages received per RPC",
+ unit=self.count)
+
+ self.grpc_client_received_bytes_per_rpc = measure.Measure(
+ name="grpc.io/client/received_bytes_per_rpc",
+ description="Total bytes received across all response messages per RPC",
+ unit=self.byte)
+
+ self.grpc_client_roundtrip_latency = measure.Measure(
+ name="grpc.io/client/roundtrip_latency",
+ description="Time between first byte of request sent to"
+ " last byte of response received or terminal error.",
+ unit=self.millisecond)
+
+ self.grpc_client_server_latency = measure.Measure(
+ name="grpc.io/client/server_latency",
+ description="Server latency in msecs",
+ unit=self.millisecond)
+
+ self.grpc_client_started_rpcs = measure.Measure(
+ name="grpc.io/client/started_rpcs",
+ description="Number of started client RPCs.",
+ unit=self.count)
+
+ self.grpc_client_sent_messages_per_method = measure.Measure(
+ name="grpc.io/client/sent_messages_per_method",
+ description="Total messages sent per method.",
+ unit=self.count)
+
+ self.grpc_client_received_messages_per_method = measure.Measure(
+ name="grpc.io/client/received_messages_per_method",
+ description="Total messages received per method.",
+ unit=self.count)
+
+ self.grpc_client_sent_bytes_per_method = measure.Measure(
+ name="grpc.io/client/sent_bytes_per_method",
+ description="Total bytes sent per method, recorded real-time as bytes are sent.",
+ unit=self.byte)
+
+ self.grpc_client_received_bytes_per_method = measure.Measure(
+ name="grpc.io/client/received_bytes_per_method",
+ description="Total bytes received per method,"
+ " recorded real-time as bytes are received.",
+ unit=self.byte)
# server measures
- self.grpc_server_received_messages_per_rpc = measure.Measure("grpc.io/server/received_messages_per_rpc",
- "Number of messages received in each RPC",
- self.count)
- self.grpc_server_received_bytes_per_rpc = measure.Measure("grpc.io/server/received_bytes_per_rpc",
- "Total bytes received across all messages per RPC",
- self.byte)
- self.grpc_server_sent_messages_per_rpc = measure.Measure("grpc.io/server/sent_messages_per_rpc",
- "Number of messages sent in each RPC",
- self.count)
- self.grpc_server_sent_bytes_per_rpc = measure.Measure("grpc.io/server/sent_bytes_per_rpc",
- "Total bytes sent across all response messages per RPC",
- self.byte)
- self.grpc_server_server_latency = measure.Measure("grpc.io/server/server_latency",
- "Time between first byte of request received to last byte of response sent or terminal error.",
- self.millisecond)
- self.grpc_server_started_rpcs = measure.Measure("grpc.io/server/started_rpcs",
- "Number of started server RPCs.",
- self.count)
- self.grpc_server_sent_messages_per_method = measure.Measure("grpc.io/server/sent_messages_per_method",
- "Total messages sent per method.",
- self.count)
- self.grpc_server_received_messages_per_method = measure.Measure("grpc.io/server/received_messages_per_method",
- "Total messages received per method.",
- self.count)
- self.grpc_server_sent_bytes_per_method = measure.Measure("grpc.io/server/sent_bytes_per_method",
- "Total bytes sent per method, recorded real-time as bytes are sent.",
- self.byte)
- self.grpc_server_received_bytes_per_method = measure.Measure("grpc.io/server/received_bytes_per_method",
- "Total bytes received per method, recorded real-time as bytes are received.",
- self.byte)
+ self.grpc_server_received_messages_per_rpc = measure.Measure(
+ name="grpc.io/server/received_messages_per_rpc",
+ description="Number of messages received in each RPC",
+ unit=self.count)
+ self.grpc_server_received_bytes_per_rpc = measure.Measure(
+ name="grpc.io/server/received_bytes_per_rpc",
+ description="Total bytes received across all messages per RPC",
+ unit=self.byte)
+
+ self.grpc_server_sent_messages_per_rpc = measure.Measure(
+ name="grpc.io/server/sent_messages_per_rpc",
+ description="Number of messages sent in each RPC",
+ unit=self.count)
+
+ self.grpc_server_sent_bytes_per_rpc = measure.Measure(
+ name="grpc.io/server/sent_bytes_per_rpc",
+ description="Total bytes sent across all response messages per RPC",
+ unit=self.byte)
+ self.grpc_server_server_latency = measure.Measure(
+ name="grpc.io/server/server_latency",
+ description="Time between first byte of request received"
+ " to last byte of response sent or terminal error.",
+ unit=self.millisecond)
+
+ self.grpc_server_started_rpcs = measure.Measure(
+ name="grpc.io/server/started_rpcs",
+ description="Number of started server RPCs.",
+ unit=self.count)
+
+ self.grpc_server_sent_messages_per_method = measure.Measure(
+ name="grpc.io/server/sent_messages_per_method",
+ description="Total messages sent per method.",
+ unit=self.count)
+
+ self.grpc_server_received_messages_per_method = measure.Measure(
+ name="grpc.io/server/received_messages_per_method",
+ description="Total messages received per method.",
+ unit=self.count)
+
+ self.grpc_server_sent_bytes_per_method = measure.Measure(
+ name="grpc.io/server/sent_bytes_per_method",
+ description="Total bytes sent per method, recorded real-time as bytes are sent.",
+ unit=self.byte)
+
+ self.grpc_server_received_bytes_per_method = measure.Measure(
+ name="grpc.io/server/received_bytes_per_method",
+ description="Total bytes received per method, recorded real-time as bytes are received.",
+ unit=self.byte)
From dcec37afa1aca868392ee90715e27663154a13bc Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 20 Apr 2020 15:25:53 -0400
Subject: [PATCH 59/66] pylint errors, rpc_m_c_test fixed
---
opencensus/trace/rpc_m_c_test.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/opencensus/trace/rpc_m_c_test.py b/opencensus/trace/rpc_m_c_test.py
index 3b4fc1ba2..979e03a4a 100644
--- a/opencensus/trace/rpc_m_c_test.py
+++ b/opencensus/trace/rpc_m_c_test.py
@@ -67,7 +67,8 @@ def test_server_measures(self):
"grpc.io/server/sent_bytes_per_rpc",
"grpc_server_sent_bytes_per_rpc not set properly")
self.assertEqual(self.rpc_measure.grpc_server_server_latency.description,
- "Time between first byte of request received to last byte of response sent or terminal error.",
+ "Time between first byte of request received to"
+ " last byte of response sent or terminal error.",
"grpc_server_server_latency not set properly")
self.assertEqual(self.rpc_measure.grpc_server_started_rpcs.unit,
"1",
From 53d216f72a1aeadfebddbd70692fd39fd0c03275 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 20 Apr 2020 15:42:25 -0400
Subject: [PATCH 60/66] fixed pylint errrors, rpc_view_constants
---
opencensus/trace/rpc_view_constants.py | 335 +++++++++++++------------
1 file changed, 176 insertions(+), 159 deletions(-)
diff --git a/opencensus/trace/rpc_view_constants.py b/opencensus/trace/rpc_view_constants.py
index ffbc596a1..0bc79296e 100644
--- a/opencensus/trace/rpc_view_constants.py
+++ b/opencensus/trace/rpc_view_constants.py
@@ -1,4 +1,3 @@
-from opencensus.stats import aggregation
from opencensus.stats.aggregation import CountAggregation
from opencensus.stats.aggregation import SumAggregation
from opencensus.stats.aggregation import DistributionAggregation
@@ -12,19 +11,19 @@ class RPCViewConstants:
constants for exporting views on RPC stats
"""
- #buckets for distributions in defaults
+ # buckets for distributions in defaults
# Common histogram bucket boundaries for bytes received/sets Views (in bytes).
- rpc_bytes_bucket_boundaries = [0, 1024, 2048, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216,
- 67108864, 268435456, 1073741824, 4294967296]
+ rpc_bytes_bucket_boundaries = [0, 1024, 2048, 4096, 16384, 65536, 262144, 4194304,
+ 16777216, 67108864, 268435456, 1073741824, 4294967296]
# Common histogram bucket boundaries for latency and elapsed-time Views (in milliseconds).
- rpc_millis_bucket_boundaries = [0.0, 0.01, 0.05, 0.1, 0.3, 0.6, 0.8, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0,
- 8.0, 10.0, 13.0, 16.0, 20.0, 25.0, 30.0, 40.0, 50.0, 65.0, 80.0, 100.0,
- 130.0, 160.0, 200.0, 250.0, 300.0, 400.0, 500.0, 650.0, 800.0,
+ rpc_millis_bucket_boundaries = [0.0, 0.01, 0.05, 0.1, 0.3, 0.6, 0.8, 1.0, 2.0, 3.0,
+ 4.0, 5.0, 6.0, 8.0, 10.0, 13.0, 16.0, 20.0, 25.0,
+ 30.0, 40.0, 50.0, 65.0, 80.0, 100.0, 130.0, 160.0,
+ 200.0, 250.0, 300.0, 400.0, 500.0, 650.0, 800.0,
1000.0, 2000.0, 5000.0, 10000.0, 20000.0, 50000.0, 100000.0]
# Common histogram bucket boundaries for request/response count Views (no unit).
- rpc_count_bucket_boundaries = [0.0, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0,
- 2048.0, 4096.0, 8192.0, 16384.0, 32768.0, 65536.0]
-
+ rpc_count_bucket_boundaries = [0.0, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0,
+ 512.0, 1024.0, 2048.0, 4096.0, 8192.0, 16384.0, 32768.0, 65536.0]
count = CountAggregation()
sum = SumAggregation()
@@ -40,159 +39,177 @@ class RPCViewConstants:
rpc_m_c = rpc_measure_constants.RPCMeasureConstants()
- # # todo create and use Duration class
- # minute =
- # hour =
- #
- # # todo
- # cumulative =
- # interval_minute =
- # interval_hour =
-
"""
rpc client views:
- The following set of views are considered minimum required to monitor client-side performance:
+ The following set of views are considered minimum
+ required to monitor client-side performance:
"""
- grpc_client_sent_bytes_per_rpc_view = view.View(name="grpc.io/client/sent_bytes_per_rpc",
- description="Sent bytes per RPC",
- columns=[rpc_m_c.grpc_client_method],
- measure=rpc_m_c.grpc_client_sent_bytes_per_rpc,
- aggregation=aggregation_with_bytes_histogram)
-
- grpc_client_received_bytes_per_rpc_view = view.View(name="grpc.io/client/received_bytes_per_rpc",
- description="Received bytes per RPC",
- columns=[rpc_m_c.grpc_client_method],
- measure=rpc_m_c.grpc_client_received_bytes_per_rpc,
- aggregation=aggregation_with_bytes_histogram)
-
- grpc_client_roundtrip_latency_view = view.View(name="grpc.io/client/roundtrip_latency",
- description="Latency in msecs",
- columns=[rpc_m_c.grpc_client_method],
- measure=rpc_m_c.grpc_client_roundtrip_latency,
- aggregation=aggregation_with_millis_histogram)
-
- grpc_client_completed_rpc_view = view.View(name="grpc.io/client/completed_rpcs",
- description="Number of completed client RPCs",
- columns=[rpc_m_c.grpc_client_method, rpc_m_c.grpc_client_status],
- measure=rpc_m_c.grpc_client_roundtrip_latency,
- aggregation=count)
-
- grpc_client_started_rpc_view = view.View(name="grpc.io/client/started_rpcs",
- description="Number of started client RPCs",
- columns=[rpc_m_c.grpc_client_method],
- measure=rpc_m_c.grpc_client_started_rpcs,
- aggregation=count)
-
- # Extra Views: The following set of views are considered useful but not mandatory to monitor client side performance
- grpc_client_sent_messages_per_rpc_view = view.View(name="grpc.io/client/sent_messages_per_rpc",
- description="Number of messages sent in the RPC",
- columns=[rpc_m_c.grpc_client_method],
- measure=rpc_m_c.grpc_client_sent_messages_per_rpc,
- aggregation=aggregation_with_count_histogram)
-
- grpc_client_received_messages_per_rpc_view = view.View(name="grpc.io/client/received_messages_per_rpc",
- description="Number of response messages received per RPC",
- columns=[rpc_m_c.grpc_client_method],
- measure=rpc_m_c.grpc_client_received_messages_per_rpc,
- aggregation=aggregation_with_count_histogram)
-
- grpc_client_server_latency_view = view.View(name="grpc.io/client/server_latency",
- description="Server latency in msecs",
- columns=[rpc_m_c.grpc_client_method],
- measure=rpc_m_c.grpc_client_server_latency,
- aggregation=aggregation_with_millis_histogram)
-
- grpc_client_sent_messages_per_method_view = view.View(name="grpc.io/client/sent_messages_per_method",
- description="Number of messages sent",
- columns=[rpc_m_c.grpc_client_method],
- measure=rpc_m_c.grpc_client_sent_messages_per_method,
- aggregation=count)
-
- grpc_client_received_messages_per_method_view = view.View(name="grpc.io/client/received_messages_per_method",
- description="Number of messages received",
- columns=[rpc_m_c.grpc_client_method],
- measure=rpc_m_c.grpc_client_received_messages_per_method,
- aggregation=count)
- grpc_client_sent_bytes_per_method_view = view.View(name="grpc.io/client/sent_bytes_per_method",
- description="Sent bytes per method",
- columns=[rpc_m_c.grpc_client_method],
- measure=rpc_m_c.grpc_client_sent_bytes_per_method,
- aggregation=sum)
-
- grpc_client_received_bytes_per_method_view = view.View(name="grpc.io/client/received_bytes_per_method",
- description="Received bytes per method",
- columns=[rpc_m_c.grpc_client_method],
- measure=rpc_m_c.grpc_client_received_bytes_per_method,
- aggregation=sum)
+ grpc_client_sent_bytes_per_rpc_view = view.View(
+ name="grpc.io/client/sent_bytes_per_rpc",
+ description="Sent bytes per RPC",
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_sent_bytes_per_rpc,
+ aggregation=aggregation_with_bytes_histogram)
+
+ grpc_client_received_bytes_per_rpc_view = view.View(
+ name="grpc.io/client/received_bytes_per_rpc",
+ description="Received bytes per RPC",
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_received_bytes_per_rpc,
+ aggregation=aggregation_with_bytes_histogram)
+
+ grpc_client_roundtrip_latency_view = view.View(
+ name="grpc.io/client/roundtrip_latency",
+ description="Latency in msecs",
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_roundtrip_latency,
+ aggregation=aggregation_with_millis_histogram)
+
+ grpc_client_completed_rpc_view = view.View(
+ name="grpc.io/client/completed_rpcs",
+ description="Number of completed client RPCs",
+ columns=[rpc_m_c.grpc_client_method, rpc_m_c.grpc_client_status],
+ measure=rpc_m_c.grpc_client_roundtrip_latency,
+ aggregation=count)
+
+ grpc_client_started_rpc_view = view.View(
+ name="grpc.io/client/started_rpcs",
+ description="Number of started client RPCs",
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_started_rpcs,
+ aggregation=count)
+
+ # Extra Views: The following set of views are considered
+ # useful but not mandatory to monitor client side performance
+ grpc_client_sent_messages_per_rpc_view = view.View(
+ name="grpc.io/client/sent_messages_per_rpc",
+ description="Number of messages sent in the RPC",
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_sent_messages_per_rpc,
+ aggregation=aggregation_with_count_histogram)
+
+ grpc_client_received_messages_per_rpc_view = view.View(
+ name="grpc.io/client/received_messages_per_rpc",
+ description="Number of response messages received per RPC",
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_received_messages_per_rpc,
+ aggregation=aggregation_with_count_histogram)
+
+ grpc_client_server_latency_view = view.View(
+ name="grpc.io/client/server_latency",
+ description="Server latency in msecs",
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_server_latency,
+ aggregation=aggregation_with_millis_histogram)
+
+ grpc_client_sent_messages_per_method_view = view.View(
+ name="grpc.io/client/sent_messages_per_method",
+ description="Number of messages sent",
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_sent_messages_per_method,
+ aggregation=count)
+
+ grpc_client_received_messages_per_method_view = view.View(
+ name="grpc.io/client/received_messages_per_method",
+ description="Number of messages received",
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_received_messages_per_method,
+ aggregation=count)
+ grpc_client_sent_bytes_per_method_view = view.View(
+ name="grpc.io/client/sent_bytes_per_method",
+ description="Sent bytes per method",
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_sent_bytes_per_method,
+ aggregation=sum)
+
+ grpc_client_received_bytes_per_method_view = view.View(
+ name="grpc.io/client/received_bytes_per_method",
+ description="Received bytes per method",
+ columns=[rpc_m_c.grpc_client_method],
+ measure=rpc_m_c.grpc_client_received_bytes_per_method,
+ aggregation=sum)
"""
rpc server views:
- The following set of views are considered minimum required to monitor server-side performance:
+ The following set of views are considered minimum
+ required to monitor server-side performance:
"""
- grpc_server_received_bytes_per_rpc = view.View(name="grpc.io/server/received_bytes_per_rpc",
- description="Received bytes per RPC",
- columns=[rpc_m_c.grpc_server_method],
- measure=rpc_m_c.grpc_server_received_bytes_per_rpc,
- aggregation=sum)
-
- grpc_server_sent_bytes_per_rpc = view.View(name="grpc.io/server/sent_bytes_per_rpc",
- description="Sent bytes per RPC",
- columns=[rpc_m_c.grpc_server_method],
- measure=rpc_m_c.grpc_server_sent_bytes_per_method,
- aggregation=sum)
-
- grpc_server_server_latency = view.View(name="grpc.io/server/server_latency",
- description="Latency in msecs",
- columns=[rpc_m_c.grpc_server_method],
- measure=rpc_m_c.grpc_server_server_latency,
- aggregation=aggregation_with_millis_histogram)
-
- grpc_server_completed_rpcs = view.View(name="grpc.io/server/completed_rpcs",
- description="Number of completed server RPCs",
- columns=[rpc_m_c.grpc_server_method, rpc_m_c.grpc_server_status],
- measure=rpc_m_c.grpc_server_server_latency,
- aggregation=count)
-
- grpc_server_started_rpcs = view.View(name="grpc.io/server/started_rpcs",
- description="Number of started server RPCs",
- columns=[rpc_m_c.grpc_server_method],
- measure=rpc_m_c.grpc_server_started_rpcs,
- aggregation=count)
-
-
- # Extra Views: The following set of views are considered useful but not mandatory to monitor server-side performance
- grpc_server_received_messages_per_rpc = view.View(name="grpc.io/server/received_messages_per_rpc",
- description="Number of response messages received in each RPC",
- columns=[rpc_m_c.grpc_server_method],
- measure=rpc_m_c.grpc_server_received_messages_per_rpc,
- aggregation=aggregation_with_count_histogram)
-
- grpc_server_sent_messages_per_rpc = view.View(name="grpc.io/server/sent_messages_per_rpc",
- description="Number of messages sent in each RPC",
- columns=[rpc_m_c.grpc_server_method],
- measure=rpc_m_c.grpc_server_sent_messages_per_rpc,
- aggregation=aggregation_with_count_histogram)
-
- grpc_server_sent_messages_per_method = view.View(name="grpc.io/server/sent_messages_per_method",
- description="Number of messages sent",
- columns=[rpc_m_c.grpc_server_method],
- measure=rpc_m_c.grpc_server_sent_messages_per_method,
- aggregation=count)
-
- grpc_server_received_messages_per_method = view.View(name="grpc.io/server/received_messages_per_method",
- description="Number of messages received",
- columns=[rpc_m_c.grpc_server_method],
- measure=rpc_m_c.grpc_server_received_messages_per_method,
- aggregation=count)
-
- grpc_server_sent_bytes_per_method = view.View(name="grpc.io/server/sent_bytes_per_method",
- description="Sent bytes per method",
- columns=[rpc_m_c.grpc_server_method],
- measure=rpc_m_c.grpc_server_sent_bytes_per_method,
- aggregation=sum)
-
- grpc_server_received_bytes_per_method = view.View(name="grpc.io/server/received_bytes_per_method",
- description="Received bytes per method",
- columns=[rpc_m_c.grpc_server_method],
- measure=rpc_m_c.grpc_server_received_bytes_per_method,
- aggregation=sum)
+ grpc_server_received_bytes_per_rpc = view.View(
+ name="grpc.io/server/received_bytes_per_rpc",
+ description="Received bytes per RPC",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_received_bytes_per_rpc,
+ aggregation=sum)
+
+ grpc_server_sent_bytes_per_rpc = view.View(
+ name="grpc.io/server/sent_bytes_per_rpc",
+ description="Sent bytes per RPC",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_sent_bytes_per_method,
+ aggregation=sum)
+
+ grpc_server_server_latency = view.View(
+ name="grpc.io/server/server_latency",
+ description="Latency in msecs",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_server_latency,
+ aggregation=aggregation_with_millis_histogram)
+
+ grpc_server_completed_rpcs = view.View(
+ name="grpc.io/server/completed_rpcs",
+ description="Number of completed server RPCs",
+ columns=[rpc_m_c.grpc_server_method, rpc_m_c.grpc_server_status],
+ measure=rpc_m_c.grpc_server_server_latency,
+ aggregation=count)
+
+ grpc_server_started_rpcs = view.View(
+ name="grpc.io/server/started_rpcs",
+ description="Number of started server RPCs",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_started_rpcs,
+ aggregation=count)
+
+
+ # Extra Views: The following set of views are considered useful
+ # but not mandatory to monitor server-side performance
+ grpc_server_received_messages_per_rpc = view.View(
+ name="grpc.io/server/received_messages_per_rpc",
+ description="Number of response messages received in each RPC",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_received_messages_per_rpc,
+ aggregation=aggregation_with_count_histogram)
+
+ grpc_server_sent_messages_per_rpc = view.View(
+ name="grpc.io/server/sent_messages_per_rpc",
+ description="Number of messages sent in each RPC",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_sent_messages_per_rpc,
+ aggregation=aggregation_with_count_histogram)
+
+ grpc_server_sent_messages_per_method = view.View(
+ name="grpc.io/server/sent_messages_per_method",
+ description="Number of messages sent",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_sent_messages_per_method,
+ aggregation=count)
+
+ grpc_server_received_messages_per_method = view.View(
+ name="grpc.io/server/received_messages_per_method",
+ description="Number of messages received",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_received_messages_per_method,
+ aggregation=count)
+
+ grpc_server_sent_bytes_per_method = view.View(
+ name="grpc.io/server/sent_bytes_per_method",
+ description="Sent bytes per method",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_sent_bytes_per_method,
+ aggregation=sum)
+
+ grpc_server_received_bytes_per_method = view.View(
+ name="grpc.io/server/received_bytes_per_method",
+ description="Received bytes per method",
+ columns=[rpc_m_c.grpc_server_method],
+ measure=rpc_m_c.grpc_server_received_bytes_per_method,
+ aggregation=sum)
From d2b5016a437547a9ddd6c8dc498ce24b4eaf8d4c Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 20 Apr 2020 15:47:35 -0400
Subject: [PATCH 61/66] fixed pylint errors, rpc_v_c_test
---
opencensus/trace/rpc_v_c_test.py | 10 +++++-----
opencensus/trace/rpc_view_constants.py | 2 ++
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/opencensus/trace/rpc_v_c_test.py b/opencensus/trace/rpc_v_c_test.py
index f1eca08d8..ca008ff9d 100644
--- a/opencensus/trace/rpc_v_c_test.py
+++ b/opencensus/trace/rpc_v_c_test.py
@@ -1,6 +1,6 @@
import unittest
import rpc_view_constants
-from opencensus.metrics.export.metric_descriptor import MetricDescriptorType
+
class RPCVCTests(unittest.TestCase):
"""
@@ -12,8 +12,8 @@ def setUp(self):
def test_client_measures(self):
self.assertEqual(self.rpc_view.grpc_client_sent_bytes_per_rpc_view.name,
- "grpc.io/client/sent_bytes_per_rpc",
- "grpc_client_sent_bytes_per_rpc_view not set correctly")
+ "grpc.io/client/sent_bytes_per_rpc",
+ "grpc_client_sent_bytes_per_rpc_view not set correctly")
self.assertEqual(self.rpc_view.grpc_client_received_bytes_per_rpc_view.description,
"Received bytes per RPC",
"grpc_client_received_bytes_per_rpc_view not set correctly")
@@ -65,11 +65,11 @@ def test_server_measures(self):
self.assertEqual(self.rpc_view.grpc_server_completed_rpcs.name,
"grpc.io/server/completed_rpcs",
"grpc_server_completed_rpcs view not set correctly")
-
+
self.assertEqual(self.rpc_view.grpc_server_started_rpcs.name,
"grpc.io/server/started_rpcs",
"grpc_server_started_rpcs view not set correctly")
-
+
# Test extra server views
self.assertEqual(self.rpc_view.grpc_server_received_messages_per_rpc.name,
"grpc.io/server/received_messages_per_rpc",
diff --git a/opencensus/trace/rpc_view_constants.py b/opencensus/trace/rpc_view_constants.py
index 0bc79296e..03ff2d09a 100644
--- a/opencensus/trace/rpc_view_constants.py
+++ b/opencensus/trace/rpc_view_constants.py
@@ -15,12 +15,14 @@ class RPCViewConstants:
# Common histogram bucket boundaries for bytes received/sets Views (in bytes).
rpc_bytes_bucket_boundaries = [0, 1024, 2048, 4096, 16384, 65536, 262144, 4194304,
16777216, 67108864, 268435456, 1073741824, 4294967296]
+
# Common histogram bucket boundaries for latency and elapsed-time Views (in milliseconds).
rpc_millis_bucket_boundaries = [0.0, 0.01, 0.05, 0.1, 0.3, 0.6, 0.8, 1.0, 2.0, 3.0,
4.0, 5.0, 6.0, 8.0, 10.0, 13.0, 16.0, 20.0, 25.0,
30.0, 40.0, 50.0, 65.0, 80.0, 100.0, 130.0, 160.0,
200.0, 250.0, 300.0, 400.0, 500.0, 650.0, 800.0,
1000.0, 2000.0, 5000.0, 10000.0, 20000.0, 50000.0, 100000.0]
+
# Common histogram bucket boundaries for request/response count Views (no unit).
rpc_count_bucket_boundaries = [0.0, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0,
512.0, 1024.0, 2048.0, 4096.0, 8192.0, 16384.0, 32768.0, 65536.0]
From b2593bda12ff46a84eafa0de29367e8698cc677e Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Mon, 20 Apr 2020 15:51:55 -0400
Subject: [PATCH 62/66] fixed pylint errors, measure and measure_test
---
opencensus/trace/measure.py | 1 -
opencensus/trace/measure_test.py | 2 ++
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/opencensus/trace/measure.py b/opencensus/trace/measure.py
index 2c1521330..eefcf8bfc 100755
--- a/opencensus/trace/measure.py
+++ b/opencensus/trace/measure.py
@@ -47,4 +47,3 @@ def description(self):
@property
def unit(self):
return self._unit
-
diff --git a/opencensus/trace/measure_test.py b/opencensus/trace/measure_test.py
index 95aa2e2ed..2981e0b53 100644
--- a/opencensus/trace/measure_test.py
+++ b/opencensus/trace/measure_test.py
@@ -13,6 +13,8 @@ def setUp(self):
self.measure = measure.Measure("grpc_client_sent_messages_per_rpc",
"Number of messages sent in the RPC",
"1")
+ self.measure_exceeds_max_length = None
+ self.measure_non_printable = None
def test_measure_name(self):
"""
From f900b2772893fbdc12764010599c53916041a9cc Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Wed, 22 Apr 2020 12:16:25 -0400
Subject: [PATCH 63/66] moved folders
---
opencensus/grpc/__init__.py | 10 +++-
opencensus/{trace => grpc}/measure.py | 0
opencensus/{trace => grpc}/rpc_m_c_test.py | 0
.../{trace => grpc}/rpc_measure_constants.py | 50 +++++++++++--------
opencensus/{trace => grpc}/rpc_v_c_test.py | 0
.../{trace => grpc}/rpc_view_constants.py | 0
opencensus/stats/measure.py | 8 +++
opencensus/{trace => stats}/measure_test.py | 18 ++++---
opencensus/trace/measure_double.py | 30 -----------
opencensus/trace/measure_old.py | 25 ----------
10 files changed, 55 insertions(+), 86 deletions(-)
rename opencensus/{trace => grpc}/measure.py (100%)
rename opencensus/{trace => grpc}/rpc_m_c_test.py (100%)
rename opencensus/{trace => grpc}/rpc_measure_constants.py (76%)
rename opencensus/{trace => grpc}/rpc_v_c_test.py (100%)
rename opencensus/{trace => grpc}/rpc_view_constants.py (100%)
rename opencensus/{trace => stats}/measure_test.py (73%)
delete mode 100644 opencensus/trace/measure_double.py
delete mode 100755 opencensus/trace/measure_old.py
diff --git a/opencensus/grpc/__init__.py b/opencensus/grpc/__init__.py
index c04609d83..fa8278248 100755
--- a/opencensus/grpc/__init__.py
+++ b/opencensus/grpc/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2018, OpenCensus Authors
+# Copyright 2017, OpenCensus Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -10,4 +10,10 @@
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
-# limitations under the License.
\ No newline at end of file
+# limitations under the License.
+
+
+import measure
+import rpc_measure_constants
+import rpc_view_constants
+
diff --git a/opencensus/trace/measure.py b/opencensus/grpc/measure.py
similarity index 100%
rename from opencensus/trace/measure.py
rename to opencensus/grpc/measure.py
diff --git a/opencensus/trace/rpc_m_c_test.py b/opencensus/grpc/rpc_m_c_test.py
similarity index 100%
rename from opencensus/trace/rpc_m_c_test.py
rename to opencensus/grpc/rpc_m_c_test.py
diff --git a/opencensus/trace/rpc_measure_constants.py b/opencensus/grpc/rpc_measure_constants.py
similarity index 76%
rename from opencensus/trace/rpc_measure_constants.py
rename to opencensus/grpc/rpc_measure_constants.py
index 9bd662b25..3c1880a2a 100644
--- a/opencensus/trace/rpc_measure_constants.py
+++ b/opencensus/grpc/rpc_measure_constants.py
@@ -1,5 +1,9 @@
from opencensus.tags import tag_key
-import measure
+from opencensus.stats.measure import BaseMeasure
+from opencensus.stats.measure import MeasureInt
+from opencensus.stats.measure import MeasureFloat
+
+# import measure
class RPCMeasureConstants:
@@ -36,109 +40,111 @@ def __init__(self):
# client measures
- self.grpc_client_sent_messages_per_rpc = measure.Measure(
+ self.grpc_client_sent_messages_per_rpc = MeasureInt(
name="grpc.io/client/sent_messages_per_rpc",
description="Number of messages sent in the RPC",
unit=self.count)
- self.grpc_client_sent_bytes_per_rpc = measure.Measure(
+ self.grpc_client_sent_bytes_per_rpc = MeasureFloat(
name="grpc.io/client/sent_bytes_per_rpc",
description="Total bytes sent across all request messages per RPC",
unit=self.byte)
- self.grpc_client_received_messages_per_rpc = measure.Measure(
+ self.grpc_client_received_messages_per_rpc = MeasureInt(
name="grpc.io/client/received_messages_per_rpc",
description="Number of response messages received per RPC",
unit=self.count)
- self.grpc_client_received_bytes_per_rpc = measure.Measure(
+ self.grpc_client_received_bytes_per_rpc = MeasureFloat(
name="grpc.io/client/received_bytes_per_rpc",
description="Total bytes received across all response messages per RPC",
unit=self.byte)
- self.grpc_client_roundtrip_latency = measure.Measure(
+ self.grpc_client_roundtrip_latency = MeasureFloat(
name="grpc.io/client/roundtrip_latency",
description="Time between first byte of request sent to"
" last byte of response received or terminal error.",
unit=self.millisecond)
- self.grpc_client_server_latency = measure.Measure(
+ self.grpc_client_server_latency = MeasureFloat(
name="grpc.io/client/server_latency",
description="Server latency in msecs",
unit=self.millisecond)
- self.grpc_client_started_rpcs = measure.Measure(
+ self.grpc_client_started_rpcs = MeasureInt(
name="grpc.io/client/started_rpcs",
description="Number of started client RPCs.",
unit=self.count)
- self.grpc_client_sent_messages_per_method = measure.Measure(
+ self.grpc_client_sent_messages_per_method = MeasureInt(
name="grpc.io/client/sent_messages_per_method",
description="Total messages sent per method.",
unit=self.count)
- self.grpc_client_received_messages_per_method = measure.Measure(
+ self.grpc_client_received_messages_per_method = MeasureInt(
name="grpc.io/client/received_messages_per_method",
description="Total messages received per method.",
unit=self.count)
- self.grpc_client_sent_bytes_per_method = measure.Measure(
+ self.grpc_client_sent_bytes_per_method = MeasureFloat(
name="grpc.io/client/sent_bytes_per_method",
description="Total bytes sent per method, recorded real-time as bytes are sent.",
unit=self.byte)
- self.grpc_client_received_bytes_per_method = measure.Measure(
+ self.grpc_client_received_bytes_per_method = MeasureFloat(
name="grpc.io/client/received_bytes_per_method",
description="Total bytes received per method,"
" recorded real-time as bytes are received.",
unit=self.byte)
# server measures
- self.grpc_server_received_messages_per_rpc = measure.Measure(
+ self.grpc_server_received_messages_per_rpc = MeasureInt(
name="grpc.io/server/received_messages_per_rpc",
description="Number of messages received in each RPC",
unit=self.count)
- self.grpc_server_received_bytes_per_rpc = measure.Measure(
+
+ self.grpc_server_received_bytes_per_rpc = MeasureFloat(
name="grpc.io/server/received_bytes_per_rpc",
description="Total bytes received across all messages per RPC",
unit=self.byte)
- self.grpc_server_sent_messages_per_rpc = measure.Measure(
+ self.grpc_server_sent_messages_per_rpc = MeasureInt(
name="grpc.io/server/sent_messages_per_rpc",
description="Number of messages sent in each RPC",
unit=self.count)
- self.grpc_server_sent_bytes_per_rpc = measure.Measure(
+ self.grpc_server_sent_bytes_per_rpc = MeasureFloat(
name="grpc.io/server/sent_bytes_per_rpc",
description="Total bytes sent across all response messages per RPC",
unit=self.byte)
- self.grpc_server_server_latency = measure.Measure(
+
+ self.grpc_server_server_latency = MeasureFloat(
name="grpc.io/server/server_latency",
description="Time between first byte of request received"
" to last byte of response sent or terminal error.",
unit=self.millisecond)
- self.grpc_server_started_rpcs = measure.Measure(
+ self.grpc_server_started_rpcs = MeasureInt(
name="grpc.io/server/started_rpcs",
description="Number of started server RPCs.",
unit=self.count)
- self.grpc_server_sent_messages_per_method = measure.Measure(
+ self.grpc_server_sent_messages_per_method = MeasureInt(
name="grpc.io/server/sent_messages_per_method",
description="Total messages sent per method.",
unit=self.count)
- self.grpc_server_received_messages_per_method = measure.Measure(
+ self.grpc_server_received_messages_per_method = MeasureInt(
name="grpc.io/server/received_messages_per_method",
description="Total messages received per method.",
unit=self.count)
- self.grpc_server_sent_bytes_per_method = measure.Measure(
+ self.grpc_server_sent_bytes_per_method = MeasureFloat(
name="grpc.io/server/sent_bytes_per_method",
description="Total bytes sent per method, recorded real-time as bytes are sent.",
unit=self.byte)
- self.grpc_server_received_bytes_per_method = measure.Measure(
+ self.grpc_server_received_bytes_per_method = MeasureFloat(
name="grpc.io/server/received_bytes_per_method",
description="Total bytes received per method, recorded real-time as bytes are received.",
unit=self.byte)
diff --git a/opencensus/trace/rpc_v_c_test.py b/opencensus/grpc/rpc_v_c_test.py
similarity index 100%
rename from opencensus/trace/rpc_v_c_test.py
rename to opencensus/grpc/rpc_v_c_test.py
diff --git a/opencensus/trace/rpc_view_constants.py b/opencensus/grpc/rpc_view_constants.py
similarity index 100%
rename from opencensus/trace/rpc_view_constants.py
rename to opencensus/grpc/rpc_view_constants.py
diff --git a/opencensus/stats/measure.py b/opencensus/stats/measure.py
index 2c8ca50a7..eb9147cd2 100644
--- a/opencensus/stats/measure.py
+++ b/opencensus/stats/measure.py
@@ -12,6 +12,12 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import string
+
+NAME_MAX_LENGTH = 255
+ERROR_MSG_INVALID_NAME = "Name should be a ASCII string with a length " \
+ "no greater than " + str(NAME_MAX_LENGTH) + " characters."
+
class BaseMeasure(object):
""" A measure is the type of metric that is being recorded with
@@ -28,6 +34,8 @@ class BaseMeasure(object):
"""
def __init__(self, name, description, unit=None):
+ if len(name) > NAME_MAX_LENGTH or not all(ch in string.printable for ch in name):
+ raise ValueError(ERROR_MSG_INVALID_NAME)
self._name = name
self._description = description
self._unit = unit
diff --git a/opencensus/trace/measure_test.py b/opencensus/stats/measure_test.py
similarity index 73%
rename from opencensus/trace/measure_test.py
rename to opencensus/stats/measure_test.py
index 2981e0b53..6dbf5627f 100644
--- a/opencensus/trace/measure_test.py
+++ b/opencensus/stats/measure_test.py
@@ -1,5 +1,9 @@
import unittest
-import measure
+from opencensus.stats.measure import BaseMeasure
+from opencensus.stats.measure import MeasureInt
+from opencensus.stats.measure import MeasureFloat
+# import measure
+
class MeasureTest(unittest.TestCase):
"""
@@ -10,9 +14,9 @@ def setUp(self):
"""
setup performed before each test
"""
- self.measure = measure.Measure("grpc_client_sent_messages_per_rpc",
- "Number of messages sent in the RPC",
- "1")
+ self.measure = MeasureInt("grpc.io/client/sent_messages_per_rpc",
+ "Number of messages sent in the RPC",
+ "1") # grpc_client_sent_messages_per_rpc
self.measure_exceeds_max_length = None
self.measure_non_printable = None
@@ -21,7 +25,7 @@ def test_measure_name(self):
tests measure module's get_name() method
"""
self.assertEqual(self.measure.name,
- "grpc_client_sent_messages_per_rpc",
+ "grpc.io/client/sent_messages_per_rpc",
"get_name() method not working")
def test_measure_description(self):
@@ -46,7 +50,7 @@ def test_long_name_init(self):
and assert that it raises ValueError as expected
"""
with self.assertRaises(ValueError):
- self.measure_exceeds_max_length = measure.Measure("a"*256, "some description", "1")
+ self.measure_exceeds_max_length = MeasureFloat("a"*256, "some description", "1")
def test_unprintable_name_init(self):
"""
@@ -56,7 +60,7 @@ def test_unprintable_name_init(self):
with self.assertRaises(ValueError):
chr_list = ['0x41', '0x1B', '0x42']
non_printable_str = "".join([chr(int(x, 16)) for x in chr_list]) # 'AB\x1b'
- self.measure_non_printable = measure.Measure(non_printable_str, "some description", "1")
+ self.measure_non_printable = MeasureInt(non_printable_str, "some description", "1")
if __name__ == '__main__':
diff --git a/opencensus/trace/measure_double.py b/opencensus/trace/measure_double.py
deleted file mode 100644
index 4be576fb4..000000000
--- a/opencensus/trace/measure_double.py
+++ /dev/null
@@ -1,30 +0,0 @@
-import measure_old
-import string
-
-class MeasureDouble(measure_old.Measure):
-
- def __init__(self, name, description, unit):
- if not (len(name) > self.name_max_length or all(ch in string.printable for ch in name)):
- raise ValueError(self.error_msg_invalid_name)
- self.name = name
- self.description = description
- self.unit = unit
-
- def get_name(self):
- return self.name
-
- def get_description(self):
- return self.description
-
- def get_unit(self):
- return self.unit
-
- def match(self):
- """
- todo: implement later
- will distinguish measure double from measure long
- """
- pass
-
-
-
diff --git a/opencensus/trace/measure_old.py b/opencensus/trace/measure_old.py
deleted file mode 100755
index 876dcdb13..000000000
--- a/opencensus/trace/measure_old.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env python3
-from opencensus.trace import tracer
-
-class Measure:
- """
- defines Measurement taken by OpenCensus library
- """
-
- def __new__(cls):
- name_max_length = 255
- error_msg_invalid_name = f"Name should be a ASCII string with a length no greater than {name_max_length} characters."
- return object.__new__(cls)
-
- def get_name(self):
- return
-
- def get_description(self):
- return
-
- def get_unit(self):
- return
-
- def create_double(self):
- return
-
From d9f4c1294d13aeb9dbd84f74b1d54d05d45ace9d Mon Sep 17 00:00:00 2001
From: Aasiyah Feisal
Date: Wed, 22 Apr 2020 16:40:38 -0400
Subject: [PATCH 64/66] Added documentation to measure and view constants
---
opencensus/grpc/rpc_measure_constants.py | 44 ++++++++++++++++++------
opencensus/grpc/rpc_view_constants.py | 44 +++++++++++++++---------
2 files changed, 61 insertions(+), 27 deletions(-)
diff --git a/opencensus/grpc/rpc_measure_constants.py b/opencensus/grpc/rpc_measure_constants.py
index 3c1880a2a..752c12085 100644
--- a/opencensus/grpc/rpc_measure_constants.py
+++ b/opencensus/grpc/rpc_measure_constants.py
@@ -5,10 +5,12 @@
# import measure
-
+"""
+Defines constants for collecting rpc stats
+"""
class RPCMeasureConstants:
"""
- constants for collecting RPC stats
+ Define constants used to define Measures below
see specs in documentation for opencensus-python
"""
byte = "by"
@@ -17,11 +19,9 @@ class RPCMeasureConstants:
def __init__(self):
"""
- contains all the RPC constants as in the Java implementation
+ Define client and server tags
"""
-
- # client tags
-
+ # Client Tags
# gRPC server status code received, e.g. OK, CANCELLED, DEADLINE_EXCEEDED
self.grpc_client_status = tag_key.TagKey("grpc_client_status")
@@ -29,8 +29,8 @@ def __init__(self):
# e.g. google.bigtable.v2.Bigtable/CheckAndMutateRow
self.grpc_client_method = tag_key.TagKey("grpc_client_method")
- # server tags
+ # Server Tags
# gRPC server status code returned, e.g. OK, CANCELLED, DEADLINE_EXCEEDED
self.grpc_server_status = tag_key.TagKey("grpc_server_status")
@@ -38,112 +38,136 @@ def __init__(self):
# e.g. com.exampleapi.v4.BookshelfService/Checkout
self.grpc_server_method = tag_key.TagKey("grpc_server_method")
-
- # client measures
+ """
+ Client Measures
+ """
+ # Number of messages sent in the RPC (always 1 for non-streaming RPCs)
self.grpc_client_sent_messages_per_rpc = MeasureInt(
name="grpc.io/client/sent_messages_per_rpc",
description="Number of messages sent in the RPC",
unit=self.count)
+ # Total bytes sent across all request messages per RPC
self.grpc_client_sent_bytes_per_rpc = MeasureFloat(
name="grpc.io/client/sent_bytes_per_rpc",
description="Total bytes sent across all request messages per RPC",
unit=self.byte)
+ # Number of response messages received per RPC (always 1 for non-streaming RPCs)
self.grpc_client_received_messages_per_rpc = MeasureInt(
name="grpc.io/client/received_messages_per_rpc",
description="Number of response messages received per RPC",
unit=self.count)
+ # Total bytes received across all response messages per RPC
self.grpc_client_received_bytes_per_rpc = MeasureFloat(
name="grpc.io/client/received_bytes_per_rpc",
description="Total bytes received across all response messages per RPC",
unit=self.byte)
+ # Time between first byte of request sent to last byte of response received, or terminal error
self.grpc_client_roundtrip_latency = MeasureFloat(
name="grpc.io/client/roundtrip_latency",
description="Time between first byte of request sent to"
" last byte of response received or terminal error.",
unit=self.millisecond)
+ # Propagated from the server and should have the same value as "grpc.io/server/latency"
self.grpc_client_server_latency = MeasureFloat(
name="grpc.io/client/server_latency",
description="Server latency in msecs",
unit=self.millisecond)
+ # The total number of client RPCs ever opened, including those that have not completed
self.grpc_client_started_rpcs = MeasureInt(
name="grpc.io/client/started_rpcs",
description="Number of started client RPCs.",
unit=self.count)
+ # Total messages sent per method
self.grpc_client_sent_messages_per_method = MeasureInt(
name="grpc.io/client/sent_messages_per_method",
description="Total messages sent per method.",
unit=self.count)
+ # Total messages received per method
self.grpc_client_received_messages_per_method = MeasureInt(
name="grpc.io/client/received_messages_per_method",
description="Total messages received per method.",
unit=self.count)
+ # Total bytes sent per method, recorded real-time as bytes are sent
self.grpc_client_sent_bytes_per_method = MeasureFloat(
name="grpc.io/client/sent_bytes_per_method",
description="Total bytes sent per method, recorded real-time as bytes are sent.",
unit=self.byte)
+ # Total bytes received per method, recorded real-time as bytes are received
self.grpc_client_received_bytes_per_method = MeasureFloat(
name="grpc.io/client/received_bytes_per_method",
description="Total bytes received per method,"
" recorded real-time as bytes are received.",
unit=self.byte)
- # server measures
+ """
+ Server Measures
+ """
+ # Number of messages received in each RPC. Has value 1 for non-streaming RPCs
self.grpc_server_received_messages_per_rpc = MeasureInt(
name="grpc.io/server/received_messages_per_rpc",
description="Number of messages received in each RPC",
unit=self.count)
+ # Total bytes received across all messages per RPC
self.grpc_server_received_bytes_per_rpc = MeasureFloat(
name="grpc.io/server/received_bytes_per_rpc",
description="Total bytes received across all messages per RPC",
unit=self.byte)
+ # Number of messages sent in each RPC. Has value 1 for non-streaming RPCs
self.grpc_server_sent_messages_per_rpc = MeasureInt(
name="grpc.io/server/sent_messages_per_rpc",
description="Number of messages sent in each RPC",
unit=self.count)
+ # Total bytes sent in across all response messages per RPC
self.grpc_server_sent_bytes_per_rpc = MeasureFloat(
name="grpc.io/server/sent_bytes_per_rpc",
description="Total bytes sent across all response messages per RPC",
unit=self.byte)
+ # Time between first byte of request received to last byte of response sent, or terminal error
self.grpc_server_server_latency = MeasureFloat(
name="grpc.io/server/server_latency",
description="Time between first byte of request received"
" to last byte of response sent or terminal error.",
unit=self.millisecond)
+ # The total number of server RPCs ever opened, including those that have not completed
self.grpc_server_started_rpcs = MeasureInt(
name="grpc.io/server/started_rpcs",
description="Number of started server RPCs.",
unit=self.count)
+ # Total messages sent per method
self.grpc_server_sent_messages_per_method = MeasureInt(
name="grpc.io/server/sent_messages_per_method",
description="Total messages sent per method.",
unit=self.count)
+ # Total messages received per method
self.grpc_server_received_messages_per_method = MeasureInt(
name="grpc.io/server/received_messages_per_method",
description="Total messages received per method.",
unit=self.count)
+ # Total bytes sent per method, recorded real-time as bytes are sent
self.grpc_server_sent_bytes_per_method = MeasureFloat(
name="grpc.io/server/sent_bytes_per_method",
description="Total bytes sent per method, recorded real-time as bytes are sent.",
unit=self.byte)
+ # Total bytes received per method, recorded real-time as bytes are received
self.grpc_server_received_bytes_per_method = MeasureFloat(
name="grpc.io/server/received_bytes_per_method",
description="Total bytes received per method, recorded real-time as bytes are received.",
diff --git a/opencensus/grpc/rpc_view_constants.py b/opencensus/grpc/rpc_view_constants.py
index 03ff2d09a..fc0b19241 100644
--- a/opencensus/grpc/rpc_view_constants.py
+++ b/opencensus/grpc/rpc_view_constants.py
@@ -5,47 +5,54 @@
from opencensus.stats import view
import rpc_measure_constants
-
+"""
+Defines constants for exporting views on rpc stats
+"""
class RPCViewConstants:
"""
- constants for exporting views on RPC stats
+ Define variables used by constants below
"""
-
- # buckets for distributions in defaults
- # Common histogram bucket boundaries for bytes received/sets Views (in bytes).
+ # Buckets for distributions in default views
+ # Common histogram bucket boundaries for bytes received/sets Views (in bytes).
rpc_bytes_bucket_boundaries = [0, 1024, 2048, 4096, 16384, 65536, 262144, 4194304,
16777216, 67108864, 268435456, 1073741824, 4294967296]
- # Common histogram bucket boundaries for latency and elapsed-time Views (in milliseconds).
+ # Common histogram bucket boundaries for latency and elapsed-time Views (in milliseconds).
rpc_millis_bucket_boundaries = [0.0, 0.01, 0.05, 0.1, 0.3, 0.6, 0.8, 1.0, 2.0, 3.0,
4.0, 5.0, 6.0, 8.0, 10.0, 13.0, 16.0, 20.0, 25.0,
30.0, 40.0, 50.0, 65.0, 80.0, 100.0, 130.0, 160.0,
200.0, 250.0, 300.0, 400.0, 500.0, 650.0, 800.0,
1000.0, 2000.0, 5000.0, 10000.0, 20000.0, 50000.0, 100000.0]
- # Common histogram bucket boundaries for request/response count Views (no unit).
+ # Common histogram bucket boundaries for request/response count Views (no unit).
rpc_count_bucket_boundaries = [0.0, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0,
512.0, 1024.0, 2048.0, 4096.0, 8192.0, 16384.0, 32768.0, 65536.0]
+ # Record sum and count stats at the same time.
count = CountAggregation()
sum = SumAggregation()
+ # Set up aggregation object for rpc_bytes_bucket_boundaries
bytes_bucket_boundaries = bucket_boundaries.BucketBoundaries(rpc_bytes_bucket_boundaries)
aggregation_with_bytes_histogram = DistributionAggregation(bytes_bucket_boundaries.boundaries)
+ # Set up aggregation object for rpc_millis_bucket_boundaries
millis_bucket_boundaries = bucket_boundaries.BucketBoundaries(rpc_millis_bucket_boundaries)
aggregation_with_millis_histogram = DistributionAggregation(millis_bucket_boundaries.boundaries)
+ # Set up aggregation object for rpc_count_bucket_boundaries
count_bucket_boundaries = bucket_boundaries.BucketBoundaries(rpc_count_bucket_boundaries)
aggregation_with_count_histogram = DistributionAggregation(count_bucket_boundaries.boundaries)
+ # Initialize an instance of RPC Measure Constants
rpc_m_c = rpc_measure_constants.RPCMeasureConstants()
"""
- rpc client views:
- The following set of views are considered minimum
- required to monitor client-side performance:
+ RPC Client Cumulative Views
"""
+ # Default Views
+ # The following set of views are considered minimum
+ # required to monitor client-side performance
grpc_client_sent_bytes_per_rpc_view = view.View(
name="grpc.io/client/sent_bytes_per_rpc",
description="Sent bytes per RPC",
@@ -81,8 +88,9 @@ class RPCViewConstants:
measure=rpc_m_c.grpc_client_started_rpcs,
aggregation=count)
- # Extra Views: The following set of views are considered
- # useful but not mandatory to monitor client side performance
+ # Extra Views
+ # The following set of views are considered useful
+ # but not mandatory to monitor client side performance
grpc_client_sent_messages_per_rpc_view = view.View(
name="grpc.io/client/sent_messages_per_rpc",
description="Number of messages sent in the RPC",
@@ -132,10 +140,11 @@ class RPCViewConstants:
aggregation=sum)
"""
- rpc server views:
- The following set of views are considered minimum
- required to monitor server-side performance:
+ RPC Server Cumulative Views
"""
+ # Default Views
+ # The following set of views are considered minimum
+ # required to monitor server-side performance
grpc_server_received_bytes_per_rpc = view.View(
name="grpc.io/server/received_bytes_per_rpc",
description="Received bytes per RPC",
@@ -172,8 +181,9 @@ class RPCViewConstants:
aggregation=count)
- # Extra Views: The following set of views are considered useful
- # but not mandatory to monitor server-side performance
+ # Extra Views
+ # The following set of views are considered useful
+ # but not mandatory to monitor server-side performance
grpc_server_received_messages_per_rpc = view.View(
name="grpc.io/server/received_messages_per_rpc",
description="Number of response messages received in each RPC",
From 54347f8cb83cc5f15b1f5c1772b69f34fbc664cd Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Wed, 22 Apr 2020 21:38:36 -0400
Subject: [PATCH 65/66] added error handling to measure
---
.../examples/metrics/simple.py | 2 +-
.../examples/metrics/sum.py | 2 +-
.../tests/test_stats_exporter.py | 2 +-
.../examples/prometheus.py | 2 +-
.../tests/test_prometheus_stats.py | 2 +-
.../examples/stackdriver.py | 2 +-
.../tests/test_stackdriver_stats.py | 2 +-
examples/stats/helloworld/main.py | 2 +-
opencensus/grpc/__init__.py | 1 -
opencensus/grpc/measure.py | 49 --------------
opencensus/grpc/rpc_measure_constants.py | 48 +++++++-------
opencensus/stats/__init__.py | 2 +
opencensus/stats/aggregation.py | 2 +-
opencensus/stats/measure.py | 26 ++------
opencensus/stats/measure_oc.py | 56 ++++++++++++++++
opencensus/stats/measure_test.py | 23 ++++---
opencensus/stats/measure_test_oc.py | 64 +++++++++++++++++++
opencensus/zpages/test_application/app.py | 2 +-
.../zpages/test_application/app_example.py | 2 +-
.../stats/prometheus/prometheus_stats_test.py | 2 +-
.../stackdriver/stackdriver_stats_test.py | 2 +-
tests/unit/stats/test_aggregation.py | 2 +-
tests/unit/stats/test_measure.py | 2 +-
tests/unit/stats/test_measure_to_view_map.py | 2 +-
tests/unit/stats/test_metric_utils.py | 6 +-
tests/unit/stats/test_stats.py | 4 +-
tests/unit/stats/test_view.py | 4 +-
tests/unit/stats/test_view_data.py | 2 +-
28 files changed, 188 insertions(+), 129 deletions(-)
delete mode 100755 opencensus/grpc/measure.py
mode change 100644 => 100755 opencensus/stats/measure.py
create mode 100644 opencensus/stats/measure_oc.py
create mode 100644 opencensus/stats/measure_test_oc.py
diff --git a/contrib/opencensus-ext-azure/examples/metrics/simple.py b/contrib/opencensus-ext-azure/examples/metrics/simple.py
index 67115f6bd..c14b5e8b4 100644
--- a/contrib/opencensus-ext-azure/examples/metrics/simple.py
+++ b/contrib/opencensus-ext-azure/examples/metrics/simple.py
@@ -16,7 +16,7 @@
from opencensus.ext.azure import metrics_exporter
from opencensus.stats import aggregation as aggregation_module
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
from opencensus.stats import stats as stats_module
from opencensus.stats import view as view_module
from opencensus.tags import tag_map as tag_map_module
diff --git a/contrib/opencensus-ext-azure/examples/metrics/sum.py b/contrib/opencensus-ext-azure/examples/metrics/sum.py
index 355c72954..2e9999326 100644
--- a/contrib/opencensus-ext-azure/examples/metrics/sum.py
+++ b/contrib/opencensus-ext-azure/examples/metrics/sum.py
@@ -16,7 +16,7 @@
from opencensus.ext.azure import metrics_exporter
from opencensus.stats import aggregation as aggregation_module
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
from opencensus.stats import stats as stats_module
from opencensus.stats import view as view_module
from opencensus.tags import tag_map as tag_map_module
diff --git a/contrib/opencensus-ext-ocagent/tests/test_stats_exporter.py b/contrib/opencensus-ext-ocagent/tests/test_stats_exporter.py
index 796628531..8de9d7ed0 100644
--- a/contrib/opencensus-ext-ocagent/tests/test_stats_exporter.py
+++ b/contrib/opencensus-ext-ocagent/tests/test_stats_exporter.py
@@ -43,7 +43,7 @@
from opencensus.proto.metrics.v1 import metrics_pb2
from opencensus.proto.resource.v1 import resource_pb2
from opencensus.stats import aggregation as aggregation_module
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
from opencensus.stats import metric_utils
from opencensus.stats import stats as stats_module
from opencensus.stats import view as view_module
diff --git a/contrib/opencensus-ext-prometheus/examples/prometheus.py b/contrib/opencensus-ext-prometheus/examples/prometheus.py
index 99912f90e..1316b4822 100644
--- a/contrib/opencensus-ext-prometheus/examples/prometheus.py
+++ b/contrib/opencensus-ext-prometheus/examples/prometheus.py
@@ -20,7 +20,7 @@
from opencensus.ext.prometheus import stats_exporter as prometheus
from opencensus.stats import aggregation as aggregation_module
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
from opencensus.stats import stats as stats_module
from opencensus.stats import view as view_module
from opencensus.tags import tag_key as tag_key_module
diff --git a/contrib/opencensus-ext-prometheus/tests/test_prometheus_stats.py b/contrib/opencensus-ext-prometheus/tests/test_prometheus_stats.py
index bc19b47ef..318930102 100644
--- a/contrib/opencensus-ext-prometheus/tests/test_prometheus_stats.py
+++ b/contrib/opencensus-ext-prometheus/tests/test_prometheus_stats.py
@@ -20,7 +20,7 @@
from opencensus.ext.prometheus import stats_exporter as prometheus
from opencensus.stats import aggregation as aggregation_module
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
from opencensus.stats import stats as stats_module
from opencensus.stats import view as view_module
from opencensus.stats import view_data as view_data_module
diff --git a/contrib/opencensus-ext-stackdriver/examples/stackdriver.py b/contrib/opencensus-ext-stackdriver/examples/stackdriver.py
index f0632e7e1..db435aa6c 100644
--- a/contrib/opencensus-ext-stackdriver/examples/stackdriver.py
+++ b/contrib/opencensus-ext-stackdriver/examples/stackdriver.py
@@ -19,7 +19,7 @@
from opencensus.ext.stackdriver import stats_exporter as stackdriver
from opencensus.stats import aggregation as aggregation_module
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
from opencensus.stats import stats as stats_module
from opencensus.stats import view as view_module
from opencensus.tags import tag_map as tag_map_module
diff --git a/contrib/opencensus-ext-stackdriver/tests/test_stackdriver_stats.py b/contrib/opencensus-ext-stackdriver/tests/test_stackdriver_stats.py
index fd3b517c6..f6519a6df 100644
--- a/contrib/opencensus-ext-stackdriver/tests/test_stackdriver_stats.py
+++ b/contrib/opencensus-ext-stackdriver/tests/test_stackdriver_stats.py
@@ -34,7 +34,7 @@
from opencensus.stats import aggregation as aggregation_module
from opencensus.stats import aggregation_data as aggregation_data_module
from opencensus.stats import execution_context
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
from opencensus.stats import metric_utils
from opencensus.stats import stats as stats_module
from opencensus.stats import view as view_module
diff --git a/examples/stats/helloworld/main.py b/examples/stats/helloworld/main.py
index 0d806cb41..bc7595e8b 100644
--- a/examples/stats/helloworld/main.py
+++ b/examples/stats/helloworld/main.py
@@ -19,7 +19,7 @@
from pprint import pprint
from opencensus.stats import aggregation as aggregation_module
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
from opencensus.stats import stats as stats_module
from opencensus.stats import view as view_module
from opencensus.tags import tag_key as tag_key_module
diff --git a/opencensus/grpc/__init__.py b/opencensus/grpc/__init__.py
index fa8278248..72dbddadc 100755
--- a/opencensus/grpc/__init__.py
+++ b/opencensus/grpc/__init__.py
@@ -13,7 +13,6 @@
# limitations under the License.
-import measure
import rpc_measure_constants
import rpc_view_constants
diff --git a/opencensus/grpc/measure.py b/opencensus/grpc/measure.py
deleted file mode 100755
index eefcf8bfc..000000000
--- a/opencensus/grpc/measure.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env python3
-import string
-
-NAME_MAX_LENGTH = 255
-ERROR_MSG_INVALID_NAME = "Name should be a ASCII string with a length " \
- "no greater than {NAME_MAX_LENGTH} characters."
-
-
-class Measure:
- """
- Measure is for the definition of a measurement that is taken by OpenCensus library
-
- attributes and their specifications taken from specs docuemntation in opencensus-python
-
- :type str
- :param name: name of the measurement
-
- :type str
- :param description: description of the measurement
-
- :type str
- :param unit: unit of the measurement, either: "ms" (for latencies in milliseconds),
- "by" (for sizes measured in bytes),
- "1" (for count of messages per RPC)
- """
- def __init__(self, name, description, unit):
- if len(name) > NAME_MAX_LENGTH or not all(ch in string.printable for ch in name):
- raise ValueError(ERROR_MSG_INVALID_NAME)
- self._name = name
- self._description = description
- self._unit = unit
-
- @property
- def name(self):
- """
- the name of the measure
- """
- return self._name
-
- @property
- def description(self):
- """
- the description of the measure
- """
- return self._description
-
- @property
- def unit(self):
- return self._unit
diff --git a/opencensus/grpc/rpc_measure_constants.py b/opencensus/grpc/rpc_measure_constants.py
index 752c12085..d7abfce19 100644
--- a/opencensus/grpc/rpc_measure_constants.py
+++ b/opencensus/grpc/rpc_measure_constants.py
@@ -1,9 +1,5 @@
from opencensus.tags import tag_key
-from opencensus.stats.measure import BaseMeasure
-from opencensus.stats.measure import MeasureInt
-from opencensus.stats.measure import MeasureFloat
-
-# import measure
+from opencensus.stats import measure
"""
Defines constants for collecting rpc stats
@@ -42,68 +38,68 @@ def __init__(self):
Client Measures
"""
# Number of messages sent in the RPC (always 1 for non-streaming RPCs)
- self.grpc_client_sent_messages_per_rpc = MeasureInt(
+ self.grpc_client_sent_messages_per_rpc = measure.MeasureInt(
name="grpc.io/client/sent_messages_per_rpc",
description="Number of messages sent in the RPC",
unit=self.count)
# Total bytes sent across all request messages per RPC
- self.grpc_client_sent_bytes_per_rpc = MeasureFloat(
+ self.grpc_client_sent_bytes_per_rpc = measure.MeasureFloat(
name="grpc.io/client/sent_bytes_per_rpc",
description="Total bytes sent across all request messages per RPC",
unit=self.byte)
# Number of response messages received per RPC (always 1 for non-streaming RPCs)
- self.grpc_client_received_messages_per_rpc = MeasureInt(
+ self.grpc_client_received_messages_per_rpc = measure.MeasureInt(
name="grpc.io/client/received_messages_per_rpc",
description="Number of response messages received per RPC",
unit=self.count)
# Total bytes received across all response messages per RPC
- self.grpc_client_received_bytes_per_rpc = MeasureFloat(
+ self.grpc_client_received_bytes_per_rpc = measure.MeasureFloat(
name="grpc.io/client/received_bytes_per_rpc",
description="Total bytes received across all response messages per RPC",
unit=self.byte)
# Time between first byte of request sent to last byte of response received, or terminal error
- self.grpc_client_roundtrip_latency = MeasureFloat(
+ self.grpc_client_roundtrip_latency = measure.MeasureFloat(
name="grpc.io/client/roundtrip_latency",
description="Time between first byte of request sent to"
" last byte of response received or terminal error.",
unit=self.millisecond)
# Propagated from the server and should have the same value as "grpc.io/server/latency"
- self.grpc_client_server_latency = MeasureFloat(
+ self.grpc_client_server_latency = measure.MeasureFloat(
name="grpc.io/client/server_latency",
description="Server latency in msecs",
unit=self.millisecond)
# The total number of client RPCs ever opened, including those that have not completed
- self.grpc_client_started_rpcs = MeasureInt(
+ self.grpc_client_started_rpcs = measure.MeasureInt(
name="grpc.io/client/started_rpcs",
description="Number of started client RPCs.",
unit=self.count)
# Total messages sent per method
- self.grpc_client_sent_messages_per_method = MeasureInt(
+ self.grpc_client_sent_messages_per_method = measure.MeasureInt(
name="grpc.io/client/sent_messages_per_method",
description="Total messages sent per method.",
unit=self.count)
# Total messages received per method
- self.grpc_client_received_messages_per_method = MeasureInt(
+ self.grpc_client_received_messages_per_method = measure.MeasureInt(
name="grpc.io/client/received_messages_per_method",
description="Total messages received per method.",
unit=self.count)
# Total bytes sent per method, recorded real-time as bytes are sent
- self.grpc_client_sent_bytes_per_method = MeasureFloat(
+ self.grpc_client_sent_bytes_per_method = measure.MeasureFloat(
name="grpc.io/client/sent_bytes_per_method",
description="Total bytes sent per method, recorded real-time as bytes are sent.",
unit=self.byte)
# Total bytes received per method, recorded real-time as bytes are received
- self.grpc_client_received_bytes_per_method = MeasureFloat(
+ self.grpc_client_received_bytes_per_method = measure.MeasureFloat(
name="grpc.io/client/received_bytes_per_method",
description="Total bytes received per method,"
" recorded real-time as bytes are received.",
@@ -113,62 +109,62 @@ def __init__(self):
Server Measures
"""
# Number of messages received in each RPC. Has value 1 for non-streaming RPCs
- self.grpc_server_received_messages_per_rpc = MeasureInt(
+ self.grpc_server_received_messages_per_rpc = measure.MeasureInt(
name="grpc.io/server/received_messages_per_rpc",
description="Number of messages received in each RPC",
unit=self.count)
# Total bytes received across all messages per RPC
- self.grpc_server_received_bytes_per_rpc = MeasureFloat(
+ self.grpc_server_received_bytes_per_rpc = measure.MeasureFloat(
name="grpc.io/server/received_bytes_per_rpc",
description="Total bytes received across all messages per RPC",
unit=self.byte)
# Number of messages sent in each RPC. Has value 1 for non-streaming RPCs
- self.grpc_server_sent_messages_per_rpc = MeasureInt(
+ self.grpc_server_sent_messages_per_rpc = measure.MeasureInt(
name="grpc.io/server/sent_messages_per_rpc",
description="Number of messages sent in each RPC",
unit=self.count)
# Total bytes sent in across all response messages per RPC
- self.grpc_server_sent_bytes_per_rpc = MeasureFloat(
+ self.grpc_server_sent_bytes_per_rpc = measure.MeasureFloat(
name="grpc.io/server/sent_bytes_per_rpc",
description="Total bytes sent across all response messages per RPC",
unit=self.byte)
# Time between first byte of request received to last byte of response sent, or terminal error
- self.grpc_server_server_latency = MeasureFloat(
+ self.grpc_server_server_latency = measure.MeasureFloat(
name="grpc.io/server/server_latency",
description="Time between first byte of request received"
" to last byte of response sent or terminal error.",
unit=self.millisecond)
# The total number of server RPCs ever opened, including those that have not completed
- self.grpc_server_started_rpcs = MeasureInt(
+ self.grpc_server_started_rpcs = measure.MeasureInt(
name="grpc.io/server/started_rpcs",
description="Number of started server RPCs.",
unit=self.count)
# Total messages sent per method
- self.grpc_server_sent_messages_per_method = MeasureInt(
+ self.grpc_server_sent_messages_per_method = measure.MeasureInt(
name="grpc.io/server/sent_messages_per_method",
description="Total messages sent per method.",
unit=self.count)
# Total messages received per method
- self.grpc_server_received_messages_per_method = MeasureInt(
+ self.grpc_server_received_messages_per_method = measure.MeasureInt(
name="grpc.io/server/received_messages_per_method",
description="Total messages received per method.",
unit=self.count)
# Total bytes sent per method, recorded real-time as bytes are sent
- self.grpc_server_sent_bytes_per_method = MeasureFloat(
+ self.grpc_server_sent_bytes_per_method = measure.MeasureFloat(
name="grpc.io/server/sent_bytes_per_method",
description="Total bytes sent per method, recorded real-time as bytes are sent.",
unit=self.byte)
# Total bytes received per method, recorded real-time as bytes are received
- self.grpc_server_received_bytes_per_method = MeasureFloat(
+ self.grpc_server_received_bytes_per_method = measure.MeasureFloat(
name="grpc.io/server/received_bytes_per_method",
description="Total bytes received per method, recorded real-time as bytes are received.",
unit=self.byte)
diff --git a/opencensus/stats/__init__.py b/opencensus/stats/__init__.py
index ebe2afa10..1e4446b83 100644
--- a/opencensus/stats/__init__.py
+++ b/opencensus/stats/__init__.py
@@ -11,3 +11,5 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
+import measure
\ No newline at end of file
diff --git a/opencensus/stats/aggregation.py b/opencensus/stats/aggregation.py
index 9d54c42e8..d9b105cfb 100644
--- a/opencensus/stats/aggregation.py
+++ b/opencensus/stats/aggregation.py
@@ -16,7 +16,7 @@
from opencensus.metrics.export.metric_descriptor import MetricDescriptorType
from opencensus.stats import aggregation_data
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
logger = logging.getLogger(__name__)
diff --git a/opencensus/stats/measure.py b/opencensus/stats/measure.py
old mode 100644
new mode 100755
index eb9147cd2..d71e0369f
--- a/opencensus/stats/measure.py
+++ b/opencensus/stats/measure.py
@@ -1,22 +1,8 @@
-# Copyright 2018, OpenCensus Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
import string
NAME_MAX_LENGTH = 255
ERROR_MSG_INVALID_NAME = "Name should be a ASCII string with a length " \
- "no greater than " + str(NAME_MAX_LENGTH) + " characters."
+ "no greater than " + str(NAME_MAX_LENGTH) + "characters."
class BaseMeasure(object):
@@ -33,7 +19,7 @@ class BaseMeasure(object):
:param unit: the units in which the measure values are measured
"""
- def __init__(self, name, description, unit=None):
+ def __init__(self, name, description, unit):
if len(name) > NAME_MAX_LENGTH or not all(ch in string.printable for ch in name):
raise ValueError(ERROR_MSG_INVALID_NAME)
self._name = name
@@ -47,7 +33,7 @@ def name(self):
@property
def description(self):
- """The description of the current measure"""
+ """The unit of the current measure"""
return self._description
@property
@@ -58,11 +44,13 @@ def unit(self):
class MeasureInt(BaseMeasure):
"""Creates an Integer Measure"""
- def __init__(self, name, description, unit=None):
+
+ def __init__(self, name, description, unit):
super(MeasureInt, self).__init__(name, description, unit)
class MeasureFloat(BaseMeasure):
"""Creates a Float Measure"""
- def __init__(self, name, description, unit=None):
+
+ def __init__(self, name, description, unit):
super(MeasureFloat, self).__init__(name, description, unit)
diff --git a/opencensus/stats/measure_oc.py b/opencensus/stats/measure_oc.py
new file mode 100644
index 000000000..55331d886
--- /dev/null
+++ b/opencensus/stats/measure_oc.py
@@ -0,0 +1,56 @@
+import string
+
+NAME_MAX_LENGTH = 255
+ERROR_MSG_INVALID_NAME = "Name should be a ASCII string with a length " \
+ "no greater than " + str(NAME_MAX_LENGTH) + " characters."
+
+
+class BaseMeasure(object):
+ """ A measure is the type of metric that is being recorded with
+ a name, description, and unit
+
+ :type name: str
+ :param name: string representing the name of the measure
+
+ :type description: str
+ :param description: a string representing the description of the measure
+
+ :type unit: str
+ :param unit: the units in which the measure values are measured
+
+ """
+ def __init__(self, name, description, unit=None):
+ if len(name) > NAME_MAX_LENGTH or not all(ch in string.printable for ch in name):
+ raise ValueError(ERROR_MSG_INVALID_NAME)
+ self._name = name
+ self._description = description
+ self._unit = unit
+
+ @property
+ def name(self):
+ """The name of the current measure"""
+ return self._name
+
+ @property
+ def description(self):
+ """The description of the current measure"""
+ return self._description
+
+ @property
+ def unit(self):
+ """The unit of the current measure"""
+ return self._unit
+
+
+class MeasureInt(BaseMeasure):
+ """Creates an Integer Measure"""
+
+ def __init__(self, name, description, unit):
+ super(MeasureInt, self).__init__(name, description, unit)
+
+
+class MeasureFloat(BaseMeasure):
+ """Creates a Float Measure"""
+
+ def __init__(self, name, description, unit=None):
+ super(MeasureFloat, self).__init__(name, description, unit)
diff --git a/opencensus/stats/measure_test.py b/opencensus/stats/measure_test.py
index 6dbf5627f..b2889d99b 100644
--- a/opencensus/stats/measure_test.py
+++ b/opencensus/stats/measure_test.py
@@ -1,22 +1,25 @@
import unittest
-from opencensus.stats.measure import BaseMeasure
-from opencensus.stats.measure import MeasureInt
-from opencensus.stats.measure import MeasureFloat
-# import measure
+import measure
+# from opencensus.stats.measure import BaseMeasure
+# from opencensus.stats.measure import MeasureInt
+# from opencensus.stats.measure import MeasureFloat
class MeasureTest(unittest.TestCase):
"""
- MeasureTest has PyUnit tests for measure.py
+ MeasureTest has PyUnit tests for measure_oc.py
+
+ here we test:
+ grpc_client_sent_messages_per_rpc
"""
def setUp(self):
"""
setup performed before each test
"""
- self.measure = MeasureInt("grpc.io/client/sent_messages_per_rpc",
- "Number of messages sent in the RPC",
- "1") # grpc_client_sent_messages_per_rpc
+ self.measure = measure.MeasureInt("grpc.io/client/sent_messages_per_rpc",
+ "Number of messages sent in the RPC",
+ "1")
self.measure_exceeds_max_length = None
self.measure_non_printable = None
@@ -50,7 +53,7 @@ def test_long_name_init(self):
and assert that it raises ValueError as expected
"""
with self.assertRaises(ValueError):
- self.measure_exceeds_max_length = MeasureFloat("a"*256, "some description", "1")
+ self.measure_exceeds_max_length = measure.MeasureInt("a"*256, "some description", "1")
def test_unprintable_name_init(self):
"""
@@ -60,7 +63,7 @@ def test_unprintable_name_init(self):
with self.assertRaises(ValueError):
chr_list = ['0x41', '0x1B', '0x42']
non_printable_str = "".join([chr(int(x, 16)) for x in chr_list]) # 'AB\x1b'
- self.measure_non_printable = MeasureInt(non_printable_str, "some description", "1")
+ self.measure_non_printable = measure.MeasureInt(non_printable_str, "some description", "1")
if __name__ == '__main__':
diff --git a/opencensus/stats/measure_test_oc.py b/opencensus/stats/measure_test_oc.py
new file mode 100644
index 000000000..c44812ced
--- /dev/null
+++ b/opencensus/stats/measure_test_oc.py
@@ -0,0 +1,64 @@
+import unittest
+import measure_oc
+
+
+class MeasureTest(unittest.TestCase):
+ """
+ MeasureTest has PyUnit tests for measure_oc.py
+ """
+
+ def setUp(self):
+ """
+ setup performed before each test
+ """
+ self.measure = measure_oc.MeasureInt("grpc.io/client/sent_messages_per_rpc",
+ "Number of messages sent in the RPC",
+ "1") # grpc_client_sent_messages_per_rpc
+ self.measure_exceeds_max_length = None
+ self.measure_non_printable = None
+
+ def test_measure_name(self):
+ """
+ tests measure module's get_name() method
+ """
+ self.assertEqual(self.measure.name,
+ "grpc.io/client/sent_messages_per_rpc",
+ "get_name() method not working")
+
+ def test_measure_description(self):
+ """
+ tests measure module's get_description() method
+ """
+ self.assertEqual(self.measure.description,
+ "Number of messages sent in the RPC",
+ "get_description() method not working")
+
+ def test_measure_unit(self):
+ """
+ tests measure module's get_unit() method
+ """
+ self.assertEqual(self.measure.unit,
+ "1",
+ "get_unit() not working correctly")
+
+ def test_long_name_init(self):
+ """
+ tests measure module's __init__() if the name str exceeds max length
+ and assert that it raises ValueError as expected
+ """
+ with self.assertRaises(ValueError):
+ self.measure_exceeds_max_length = measure_oc.MeasureFloat("a"*256, "some description", "1")
+
+ def test_unprintable_name_init(self):
+ """
+ tests measure module's __init__() if the name str contains a non-printable ascii character
+ and assert that it raises ValueError as expected
+ """
+ with self.assertRaises(ValueError):
+ chr_list = ['0x41', '0x1B', '0x42']
+ non_printable_str = "".join([chr(int(x, 16)) for x in chr_list]) # 'AB\x1b'
+ self.measure_non_printable = measure_oc.MeasureInt(non_printable_str, "some description", "1")
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/opencensus/zpages/test_application/app.py b/opencensus/zpages/test_application/app.py
index fdd2b8066..fef2d4401 100644
--- a/opencensus/zpages/test_application/app.py
+++ b/opencensus/zpages/test_application/app.py
@@ -25,7 +25,7 @@
from opencensus.trace.samplers import AlwaysOnSampler
from opencensus.trace.tracer import Tracer
from opencensus.stats import aggregation as aggregation_module
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
from opencensus.stats import stats as stats_module
from opencensus.stats import view as view_module
from opencensus.tags import tag_key as tag_key_module
diff --git a/opencensus/zpages/test_application/app_example.py b/opencensus/zpages/test_application/app_example.py
index 06dc3feb3..4dc63b251 100644
--- a/opencensus/zpages/test_application/app_example.py
+++ b/opencensus/zpages/test_application/app_example.py
@@ -26,7 +26,7 @@
from opencensus.trace.samplers import AlwaysOnSampler
from opencensus.trace.tracer import Tracer
from opencensus.stats import aggregation as aggregation_module
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
from opencensus.stats import stats as stats_module
from opencensus.stats import view as view_module
from opencensus.tags import tag_key as tag_key_module
diff --git a/tests/system/stats/prometheus/prometheus_stats_test.py b/tests/system/stats/prometheus/prometheus_stats_test.py
index 06bcb31c7..e93cf7021 100644
--- a/tests/system/stats/prometheus/prometheus_stats_test.py
+++ b/tests/system/stats/prometheus/prometheus_stats_test.py
@@ -19,7 +19,7 @@
from opencensus.ext.prometheus import stats_exporter as prometheus
from opencensus.stats import aggregation as aggregation_module
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
from opencensus.stats import stats as stats_module
from opencensus.stats import view as view_module
from opencensus.tags import tag_key as tag_key_module
diff --git a/tests/system/stats/stackdriver/stackdriver_stats_test.py b/tests/system/stats/stackdriver/stackdriver_stats_test.py
index 783a2d252..d942c3ae0 100644
--- a/tests/system/stats/stackdriver/stackdriver_stats_test.py
+++ b/tests/system/stats/stackdriver/stackdriver_stats_test.py
@@ -23,7 +23,7 @@
from opencensus.ext.stackdriver import stats_exporter as stackdriver
from opencensus.metrics import transport
from opencensus.stats import aggregation as aggregation_module
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
from opencensus.stats import stats as stats_module
from opencensus.stats import view as view_module
from opencensus.tags import tag_key as tag_key_module
diff --git a/tests/unit/stats/test_aggregation.py b/tests/unit/stats/test_aggregation.py
index 671c1910d..7e32dcd69 100644
--- a/tests/unit/stats/test_aggregation.py
+++ b/tests/unit/stats/test_aggregation.py
@@ -18,7 +18,7 @@
from opencensus.metrics.export import value
from opencensus.stats import aggregation as aggregation_module
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
class TestSumAggregation(unittest.TestCase):
diff --git a/tests/unit/stats/test_measure.py b/tests/unit/stats/test_measure.py
index ae0d96c90..cc87fbcd6 100644
--- a/tests/unit/stats/test_measure.py
+++ b/tests/unit/stats/test_measure.py
@@ -14,7 +14,7 @@
import unittest
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
class TestBaseMeasure(unittest.TestCase):
diff --git a/tests/unit/stats/test_measure_to_view_map.py b/tests/unit/stats/test_measure_to_view_map.py
index a754baf04..da2925f9a 100644
--- a/tests/unit/stats/test_measure_to_view_map.py
+++ b/tests/unit/stats/test_measure_to_view_map.py
@@ -18,7 +18,7 @@
from opencensus.stats import measure_to_view_map as measure_to_view_map_module
from opencensus.stats.aggregation import CountAggregation
-from opencensus.stats.measure import BaseMeasure, MeasureInt
+from opencensus.stats.measure_oc import BaseMeasure, MeasureInt
from opencensus.stats.view import View
from opencensus.stats.view_data import ViewData
from opencensus.tags import tag_key as tag_key_module
diff --git a/tests/unit/stats/test_metric_utils.py b/tests/unit/stats/test_metric_utils.py
index 355f0da2e..a92c24423 100644
--- a/tests/unit/stats/test_metric_utils.py
+++ b/tests/unit/stats/test_metric_utils.py
@@ -21,7 +21,7 @@
from opencensus.stats import (
aggregation,
aggregation_data,
- measure,
+ measure_oc,
metric_utils,
view,
view_data,
@@ -42,7 +42,7 @@ def do_test_view_data_to_metric(self, aggregation_class,
start_time = datetime.datetime(2019, 1, 25, 11, 12, 13)
current_time = datetime.datetime(2019, 1, 25, 12, 13, 14)
- mock_measure = mock.Mock(spec=measure.MeasureFloat)
+ mock_measure = mock.Mock(spec=measure_oc.MeasureFloat)
mock_aggregation = mock.Mock(spec=aggregation_class)
mock_aggregation.get_metric_type.return_value = metric_descriptor_type
@@ -110,7 +110,7 @@ def test_view_data_to_metric(self):
self.do_test_view_data_to_metric(*args)
def test_convert_view_without_labels(self):
- mock_measure = mock.Mock(spec=measure.MeasureFloat)
+ mock_measure = mock.Mock(spec=measure_oc.MeasureFloat)
mock_aggregation = mock.Mock(spec=aggregation.DistributionAggregation)
mock_aggregation.get_metric_type.return_value = \
metric_descriptor.MetricDescriptorType.CUMULATIVE_DISTRIBUTION
diff --git a/tests/unit/stats/test_stats.py b/tests/unit/stats/test_stats.py
index e120ac499..a590fcec9 100644
--- a/tests/unit/stats/test_stats.py
+++ b/tests/unit/stats/test_stats.py
@@ -20,7 +20,7 @@
import unittest
from opencensus.metrics.export import metric_descriptor, value
-from opencensus.stats import aggregation, measure
+from opencensus.stats import aggregation, measure_oc
from opencensus.stats import stats as stats_module
from opencensus.stats import view
from opencensus.tags import tag_map
@@ -36,7 +36,7 @@ def test_get_metrics(self):
initial_metrics = list(stats.get_metrics())
self.assertEqual(initial_metrics, [])
- mock_measure = Mock(spec=measure.MeasureFloat)
+ mock_measure = Mock(spec=measure_oc.MeasureFloat)
mock_md = Mock(spec=metric_descriptor.MetricDescriptor)
mock_md.type =\
diff --git a/tests/unit/stats/test_view.py b/tests/unit/stats/test_view.py
index 30dca3cdc..60f203a23 100644
--- a/tests/unit/stats/test_view.py
+++ b/tests/unit/stats/test_view.py
@@ -17,7 +17,7 @@
import mock
from opencensus.metrics.export import metric_descriptor
-from opencensus.stats import aggregation, measure
+from opencensus.stats import aggregation, measure_oc
from opencensus.stats import view as view_module
@@ -43,7 +43,7 @@ def test_constructor(self):
self.assertEqual(aggregation, view.aggregation)
def test_view_to_metric_descriptor(self):
- mock_measure = mock.Mock(spec=measure.MeasureFloat)
+ mock_measure = mock.Mock(spec=measure_oc.MeasureFloat)
mock_agg = mock.Mock(spec=aggregation.SumAggregation)
mock_agg.get_metric_type.return_value = \
metric_descriptor.MetricDescriptorType.CUMULATIVE_DOUBLE
diff --git a/tests/unit/stats/test_view_data.py b/tests/unit/stats/test_view_data.py
index 87791802a..f1fdc4f5e 100644
--- a/tests/unit/stats/test_view_data.py
+++ b/tests/unit/stats/test_view_data.py
@@ -19,7 +19,7 @@
from opencensus.common import utils
from opencensus.stats import aggregation as aggregation_module
-from opencensus.stats import measure as measure_module
+from opencensus.stats import measure_oc as measure_module
from opencensus.stats import view as view_module
from opencensus.stats import view_data as view_data_module
From e8369b1cba272790553bc6f1a7e709569c195975 Mon Sep 17 00:00:00 2001
From: Anam Navied
Date: Thu, 23 Apr 2020 19:31:17 -0400
Subject: [PATCH 66/66] removed zpage attempt files
---
dummyReactApp/app/.gitignore | 23 -
dummyReactApp/app/README.md | 68 -
dummyReactApp/app/package.json | 37 -
dummyReactApp/app/public/favicon.ico | Bin 3150 -> 0 bytes
dummyReactApp/app/public/index.html | 48 -
dummyReactApp/app/public/logo192.png | Bin 5347 -> 0 bytes
dummyReactApp/app/public/logo512.png | Bin 9664 -> 0 bytes
dummyReactApp/app/public/manifest.json | 25 -
dummyReactApp/app/public/robots.txt | 3 -
dummyReactApp/app/src/App.css | 38 -
dummyReactApp/app/src/App.js | 76 -
dummyReactApp/app/src/App.test.js | 9 -
dummyReactApp/app/src/backend.py | 50 -
dummyReactApp/app/src/index.css | 13 -
dummyReactApp/app/src/index.js | 12 -
dummyReactApp/app/src/logo.svg | 7 -
dummyReactApp/app/src/serviceWorker.js | 141 -
dummyReactApp/app/src/setupTests.js | 5 -
dummyReactApp/app/yarn.lock | 10699 ----------------
opencensus/zpages/__init__.py | 0
opencensus/zpages/rpczpage_handler.py | 509 -
opencensus/zpages/stats.py | 0
opencensus/zpages/statssnapshot.py | 19 -
opencensus/zpages/style.py | 52 -
opencensus/zpages/template.py | 0
opencensus/zpages/templates/index.html | 52 -
.../zpages/test_application/__init__.py | 0
.../zpages/test_application/anam_traces.json | 0
opencensus/zpages/test_application/app.py | 133 -
.../zpages/test_application/app_example.py | 111 -
opencensus/zpages/test_application/backend.py | 29 -
opencensus/zpages/trace.py | 0
opencensus/zpages/zpage_handler.py | 25 -
opencensus/zpages/zpage_handlers.py | 14 -
opencensus/zpages/zpage_tester.py | 128 -
35 files changed, 12326 deletions(-)
delete mode 100644 dummyReactApp/app/.gitignore
delete mode 100644 dummyReactApp/app/README.md
delete mode 100644 dummyReactApp/app/package.json
delete mode 100644 dummyReactApp/app/public/favicon.ico
delete mode 100644 dummyReactApp/app/public/index.html
delete mode 100644 dummyReactApp/app/public/logo192.png
delete mode 100644 dummyReactApp/app/public/logo512.png
delete mode 100644 dummyReactApp/app/public/manifest.json
delete mode 100644 dummyReactApp/app/public/robots.txt
delete mode 100644 dummyReactApp/app/src/App.css
delete mode 100644 dummyReactApp/app/src/App.js
delete mode 100644 dummyReactApp/app/src/App.test.js
delete mode 100644 dummyReactApp/app/src/backend.py
delete mode 100644 dummyReactApp/app/src/index.css
delete mode 100644 dummyReactApp/app/src/index.js
delete mode 100644 dummyReactApp/app/src/logo.svg
delete mode 100644 dummyReactApp/app/src/serviceWorker.js
delete mode 100644 dummyReactApp/app/src/setupTests.js
delete mode 100644 dummyReactApp/app/yarn.lock
delete mode 100644 opencensus/zpages/__init__.py
delete mode 100644 opencensus/zpages/rpczpage_handler.py
delete mode 100644 opencensus/zpages/stats.py
delete mode 100644 opencensus/zpages/statssnapshot.py
delete mode 100644 opencensus/zpages/style.py
delete mode 100644 opencensus/zpages/template.py
delete mode 100644 opencensus/zpages/templates/index.html
delete mode 100644 opencensus/zpages/test_application/__init__.py
delete mode 100644 opencensus/zpages/test_application/anam_traces.json
delete mode 100644 opencensus/zpages/test_application/app.py
delete mode 100644 opencensus/zpages/test_application/app_example.py
delete mode 100644 opencensus/zpages/test_application/backend.py
delete mode 100644 opencensus/zpages/trace.py
delete mode 100644 opencensus/zpages/zpage_handler.py
delete mode 100644 opencensus/zpages/zpage_handlers.py
delete mode 100644 opencensus/zpages/zpage_tester.py
diff --git a/dummyReactApp/app/.gitignore b/dummyReactApp/app/.gitignore
deleted file mode 100644
index 4d29575de..000000000
--- a/dummyReactApp/app/.gitignore
+++ /dev/null
@@ -1,23 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-
-# testing
-/coverage
-
-# production
-/build
-
-# misc
-.DS_Store
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
diff --git a/dummyReactApp/app/README.md b/dummyReactApp/app/README.md
deleted file mode 100644
index 9c40dcdc3..000000000
--- a/dummyReactApp/app/README.md
+++ /dev/null
@@ -1,68 +0,0 @@
-This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
-
-## Available Scripts
-
-In the project directory, you can run:
-
-### `yarn start`
-
-Runs the app in the development mode.
-Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
-
-The page will reload if you make edits.
-You will also see any lint errors in the console.
-
-### `yarn test`
-
-Launches the test runner in the interactive watch mode.
-See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
-
-### `yarn build`
-
-Builds the app for production to the `build` folder.
-It correctly bundles React in production mode and optimizes the build for the best performance.
-
-The build is minified and the filenames include the hashes.
-Your app is ready to be deployed!
-
-See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
-
-### `yarn eject`
-
-**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
-
-If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
-
-Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
-
-You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
-
-## Learn More
-
-You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
-
-To learn React, check out the [React documentation](https://reactjs.org/).
-
-### Code Splitting
-
-This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting
-
-### Analyzing the Bundle Size
-
-This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size
-
-### Making a Progressive Web App
-
-This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app
-
-### Advanced Configuration
-
-This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration
-
-### Deployment
-
-This section has moved here: https://facebook.github.io/create-react-app/docs/deployment
-
-### `yarn build` fails to minify
-
-This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify
diff --git a/dummyReactApp/app/package.json b/dummyReactApp/app/package.json
deleted file mode 100644
index 3c2c35aa9..000000000
--- a/dummyReactApp/app/package.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "name": "app",
- "version": "0.1.0",
- "private": true,
- "dependencies": {
- "@material-ui/core": "^4.9.4",
- "@material-ui/icons": "^4.9.1",
- "@testing-library/jest-dom": "^4.2.4",
- "@testing-library/react": "^9.3.2",
- "@testing-library/user-event": "^7.1.2",
- "react": "^16.12.0",
- "react-dom": "^16.12.0",
- "react-scripts": "3.4.0"
- },
- "scripts": {
- "start": "PORT=8080 react-scripts start",
- "build": "react-scripts build",
- "test": "react-scripts test",
- "eject": "react-scripts eject"
- },
- "eslintConfig": {
- "extends": "react-app"
- },
- "proxy": "http://localhost:5000",
- "browserslist": {
- "production": [
- ">0.2%",
- "not dead",
- "not op_mini all"
- ],
- "development": [
- "last 1 chrome version",
- "last 1 firefox version",
- "last 1 safari version"
- ]
- }
-}
diff --git a/dummyReactApp/app/public/favicon.ico b/dummyReactApp/app/public/favicon.ico
deleted file mode 100644
index bcd5dfd67cd0361b78123e95c2dd96031f27f743..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3150
zcmaKtc{Ei0AIGn;MZ^<@lHD*OV;K7~W1q3jSjJcqNywTkMOhP*k~Oj?GO|6{m(*C2
zC7JA+hN%%Bp7T4;J@?%2_x=5zbI<2~->=X60stMr0B~{wzpi9D0MG|#
zyuANt7z6;uz%?PEfAnimLl^)6h5ARwGXemG2>?hqQv-I^Gpyh$JH}Ag92}3{$a#z&
zd`il2Sb#$U&e&4#^4R|GTgk!Qs+x*PCL{2+`uB5mqtnqLaaw`*H2oqJ?XF(zUACc2
zSibBrdQzcidqv*TK}rpEv1ie&;Famq2IK5%4c}1Jt2b1x_{y1C!?EU)@`_F)yN*NK
z)(u03@%g%uDawwXGAMm%EnP9FgoucUedioDwL~{6RVO@A-Q$+pwVRR%WYR>{K3E&Q
zzqzT!EEZ$_NHGYM6&PK#CGUV$pTWsiI5#~m>htoJ!vbc0=gm3H8sz8KzIiVN5xdCT
z%;}`UH2Pc8))1VS-unh?v4*H*NIy5On{MRKw7BTmOO9oE2UApwkCl9Z?^dod9M^#w
z51tEZhf+#dpTo#GDDy#kuzoIjMjZ?%v*h$
z*vwUMOjGc?R0(FjLWkMD)kca4z6~H45FIzQ!Zzu&-yWyMdCBsDr2`l}Q{8fH$H@O<
z$&snNzbqLk?(GIe?!PVh?F~2qk4z^rMcp$P^hw^rUPjyCyoNTRw%;hNOwrCoN?G0E
z!wT^=4Loa9@O{t;Wk(Nj=?ms1Z?UN_;21m%sUm?uib=pg&x|u)8pP#l--$;B9l47n
zUUnMV0sXLe*@Gvy>XWjRoqc2tOzgYn%?g@Lb8C&WsxV1Kjssh^ZBs*Ysr+E6%tsC_
zCo-)hkYY=Bn?wMB4sqm?WS>{kh<6*DO)vXnQpQ9`-_qF6!#b;3Nf@;#B>e2j$yokl6F|9p1<($2
z=WSr%)Z?^|r6njhgbuMrIN>8JE05u0x5t@_dEfbGn9r0hK4c2vp>(*$GXsjeLL_uz
zWpyfUgdv!~-2N;llVzik#s2*XB*%7u8(^sJv&T3pzaR&<9({17Zs~UY>#ugZZkHBs
zD+>0_an$?}utGp$dcXtyFHnTQZJ}SF=oZ}X07dz~K>^o(vjTzw8ZQc!Fw1W=&Z?9%
zv63|~l}70sJbY?H8ON8j)w5=6OpXuaZ}YT03`2%u8{;B0Vafo_iY7&BiQTbRkdJBYL}?%ATfmc
zLG$uXt$@3j#OIjALdT&Ut$=9F8cgV{w_f5eS)PjoVi
z&oemp-SKJ~UuGuCP1|iY?J^S&P
z)-IG?O-*=z6kfZrX5H*G=aQ{ZaqnOqP@&+_;nq@mA>EcjgxrYX8EK|Iq4&E&rxR?R
z8N$QOdRwY
zr{P`O)=87>YLHtFfGXW
z6P)ucrhj~It_9w<^v5>T6N1U}+BkS))=WX*2JY=}^b2czGhH<`?`(}}qMcpPx_%>M
zM|fs(+I1m&_h(zqp-HgP>re$2O^o$q)xu#fl0ivOJE({duU)a*OD(eYgSi^cdTn}pqcPM(;S)2%1By^Wh%-CaC%>d9hi`7J
zaxL7@;nhA>PE%s99&;z{8>VFgf{u!(-B-x7Of6ueme+ScryL`h(^qKE)DtieWY>-7
zgB)VJESQS4*1LU(2&@pgLvSt{(((C?K_V(rQk``i&5}ZPG;G^FiPlZ$7|-vEmMWlU
z5lQ%iK2nu=h2wd_7>gK@vX=*AG+u~rQP$NwPC`ZA?4nh{3tui1x@bT6-;Rk3yDQ>d
z?3qRD#+PeV7#FAa>s`Xwxsx_oRFcN$StW2=CW`=qObsT?SD^#^jM1Yk}PSPxJ
zG@-_mnNU_)vM|iLRSI>UMp|hatyS}17R{10IuL0TLlupt>9dRs_SPQbv7BLYyC#qv16E-y@XZ=
z-!p7I%#r-BVi$nQq3&ssRc_IC%R6$tA&^s_l46880~Wst3@>(|EO<}T4~ci~#!=e;
zD)B>o%1+$ksURD1p7I-<3ehlFyVkqrySf&gg>Bp0Z9?JaG|gyTZ{Cb8SdvAWVmFX7v2ohs!OCc!Udk
zUITUpmZ33rKLI#(&lDj}cKA#dpL4Fil=$5pu_wi1XJR!llw`
zSItPBDEdMHk2>c7#%lBxZHHvtVUOZ$}v?=?AT~9!Jcqa@IJGuMg(s^7r>pcTrd)pS`{5Cu8WPey`
z9)!!OUUY@L%9Q+bZa*S5`3f_|lFCPN6kdp_M2>{le8;cn^XUsPa+TUk47qd6)IBR%
zk*&Ip?!Ge_gmmdj)BX}P_5o@VI2*wbZ^>UhFju}0gQZh!pP%4XT9{@w;G#b3XK8sN
zF(7i$Jv(IM$8Akys9dhP^^~H2(7BfJp}yDW1#@!CL-!mGcSCnJ599WK9MV@yo_u$v
MDeX2GIKR{Qf5okjU;qFB
diff --git a/dummyReactApp/app/public/index.html b/dummyReactApp/app/public/index.html
deleted file mode 100644
index eab0754ce..000000000
--- a/dummyReactApp/app/public/index.html
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- React App
-
-
- You need to enable JavaScript to run this app.
-
-
-
- Activate Lasers
-
-
-
diff --git a/dummyReactApp/app/public/logo192.png b/dummyReactApp/app/public/logo192.png
deleted file mode 100644
index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 5347
zcmZWtbyO6NvR-oO24RV%BvuJ&=?+<7=`LvyB&A_#M7mSDYw1v6DJkiYl9XjT!%$dLEBTQ8R9|wd3008in6lFF3GV-6mLi?MoP_y~}QUnaDCHI#t
z7w^m$@6DI)|C8_jrT?q=f8D?0AM?L)Z}xAo^e^W>t$*Y0KlT5=@bBjT9kxb%-KNdk
zeOS1tKO#ChhG7%{ApNBzE2ZVNcxbrin#E1TiAw#BlUhXllzhN$qWez5l;h+t^q#Eav8PhR2|T}y5kkflaK`ba-eoE+Z2q@o6P$)=&`
z+(8}+-McnNO>e#$Rr{32ngsZIAX>GH??tqgwUuUz6kjns|LjsB37zUEWd|(&O!)DY
zQLrq%Y>)Y8G`yYbYCx&aVHi@-vZ3|ebG!f$sTQqMgi0hWRJ^Wc+Ibv!udh_r%2|U)
zPi|E^PK?UE!>_4`f`1k4hqqj_$+d!EB_#IYt;f9)fBOumGNyglU(ofY`yHq4Y?B%-
zp&G!MRY<~ajTgIHErMe(Z8JG*;D-PJhd@RX@QatggM7+G(Lz8eZ;73)72Hfx5KDOE
zkT(m}i2;@X2AT5fW?qVp?@WgN$aT+f_6eo?IsLh;jscNRp|8H}Z9p_UBO^SJXpZew
zEK8fz|0Th%(Wr|KZBGTM4yxkA5CFdAj8=QSrT$fKW#tweUFqr0TZ9D~a5lF{)%-tTGMK^2tz(y2v$i%V8XAxIywrZCp=)83p(zIk6@S5AWl|Oa2hF`~~^W
zI;KeOSkw1O#TiQ8;U7OPXjZM|KrnN}9arP)m0v$c|L)lF`j_rpG(zW1Qjv$=^|p*f
z>)Na{D&>n`jOWMwB^TM}slgTEcjxTlUby89j1)|6ydRfWERn3|7Zd2&e7?!K&5G$x
z`5U3uFtn4~SZq|LjFVrz$3iln-+ucY4q$BC{CSm7Xe5c1J<=%Oagztj{ifpaZk_bQ
z9Sb-LaQMKp-qJA*bP6DzgE3`}*i1o3GKmo2pn@dj0;He}F=BgINo};6gQF8!n0ULZ
zL>kC0nPSFzlcB7p41doao2F7%6IUTi_+!L`MM4o*#Y#0v~WiO8uSeAUNp=vA2KaR&=jNR2iVwG>7t%sG2x_~yXzY)7K&
zk3p+O0AFZ1eu^T3s};B%6TpJ6h-Y%B^*zT&SN7C=N;g|#dGIVMSOru3iv^SvO>h4M=t-N1GSLLDqVTcgurco6)3&XpU!FP6Hlrmj}f$
zp95;b)>M~`kxuZF3r~a!rMf4|&1=uMG$;h^g=Kl;H&Np-(pFT9FF@++MMEx3RBsK?AU0fPk-#mdR)Wdkj)`>ZMl#^<80kM87VvsI3r_c@_vX=fdQ`_9-d(xiI
z4K;1y1TiPj_RPh*SpDI7U~^QQ?%0&!$Sh#?x_@;ag)P}ZkAik{_WPB4rHyW#%>|Gs
zdbhyt=qQPA7`?h2_8T;-E6HI#im9K>au*(j4;kzwMSLgo6u*}-K`$_Gzgu&XE)udQ
zmQ72^eZd|vzI)~!20JV-v-T|<4@7ruqrj|o4=JJPlybwMg;M$Ud7>h6g()CT@wXm`
zbq=A(t;RJ^{Xxi*Ff~!|3!-l_PS{AyNAU~t{h;(N(PXMEf^R(B+ZVX3
z8y0;0A8hJYp@g+c*`>eTA|3Tgv9U8#BDTO9@a@gVMDxr(fVaEqL1tl?md{v^j8aUv
zm&%PX4^|rX|?E4^CkplWWNv*OKM>DxPa
z!RJ)U^0-WJMi)Ksc!^ixOtw^egoAZZ2Cg;X7(5xZG7yL_;UJ#yp*ZD-;I^Z9qkP`}
zwCTs0*%rIVF1sgLervtnUo&brwz?6?PXRuOCS*JI-WL6GKy7-~yi0giTEMmDs_-UX
zo=+nFrW_EfTg>oY72_4Z0*uG>MnXP=c0VpT&*|rvv1iStW;*^={rP1y?Hv+6R6bxFMkxpWkJ>m7Ba{>zc_q
zEefC3jsXdyS5??Mz7IET$Kft|EMNJIv7Ny8ZOcKnzf`K5Cd)&`-fTY#W&jnV0l2vt
z?Gqhic}l}mCv1yUEy$%DP}4AN;36$=7aNI^*AzV(eYGeJ(Px-j<^gSDp5dBAv2#?;
zcMXv#aj>%;MiG^q^$0MSg-(uTl!xm49dH!{X0){Ew7ThWV~Gtj7h%ZD
zVN-R-^7Cf0VH!8O)uUHPL2mO2tmE*cecwQv_5CzWeh)ykX8r5Hi`ehYo)d{Jnh&3p
z9ndXT$OW51#H5cFKa76c<%nNkP~FU93b5h-|Cb}ScHs@4Q#|}byWg;KDMJ#|l
zE=MKD0c>*F@HDBcX@~QJH%56eh~jfPO-uKm}~t7VkHxHT;)4sd+?Wc4*
z>CyR*{w@4(gnYRdFq=^(#-ytb^5ESD?x<0Skhb%Pt?npNW1m+Nv`tr9+qN<3H1f<%
zZvNEqyK5FgPsQ`QIu9P0x_}wJR~^CotL|n
zk?dn;tLRw9jJTur4uWoX6iMm914f0AJfB@C74a;_qRrAP4E7l890P&{v<}>_&GLrW
z)klculcg`?zJO~4;BBAa=POU%aN|pmZJn2{hA!d!*lwO%YSIzv8bTJ}=nhC^n}g(ld^rn#kq9Z3)z`k9lvV>y#!F4e{5c$tnr9M{V)0m(Z<
z#88vX6-AW7T2UUwW`g<;8I$Jb!R%z@rCcGT)-2k7&x9kZZT66}Ztid~6t0jKb&9mm
zpa}LCb`bz`{MzpZR#E*QuBiZXI#<`5qxx=&LMr-UUf~@dRk}YI2hbMsAMWOmDzYtm
zjof16D=mc`^B$+_bCG$$@R0t;e?~UkF?7<(vkb70*EQB1rfUWXh$j)R2)+dNAH5%R
zEBs^?N;UMdy}V};59Gu#0$q53$}|+q7CIGg_w_WlvE}AdqoS<7DY1LWS9?TrfmcvT
zaypmplwn=P4;a8-%l^e?f`OpGb}%(_mFsL&GywhyN(-VROj`4~V~9bGv%UhcA|YW%
zs{;nh@aDX11y^HOFXB$a7#Sr3cEtNd4eLm@Y#fc&j)TGvbbMwze
zXtekX_wJqxe4NhuW$r}cNy|L{V=t#$%SuWEW)YZTH|!iT79k#?632OFse{+BT_gau
zJwQcbH{b}dzKO?^dV&3nTILYlGw{27UJ72ZN){BILd_HV_s$WfI2DC<9LIHFmtyw?
zQ;?MuK7g%Ym+4e^W#5}WDLpko%jPOC=aN)3!=8)s#Rnercak&b3ESRX3z{xfKBF8L
z5%CGkFmGO@x?_mPGlpEej!3!AMddChabyf~nJNZxx!D&{@xEb!TDyvqSj%Y5@A{}9
zRzoBn0?x}=krh{ok3Nn%e)#~uh;6jpezhA)ySb^b#E>73e*frBFu6IZ^D7Ii&rsiU
z%jzygxT-n*joJpY4o&8UXr2s%j^Q{?e-voloX`4DQyEK+DmrZh8A$)iWL#NO9+Y@!sO2f@rI!@jN@>HOA<
z?q2l{^%mY*PNx2FoX+A7X3N}(RV$B`g&N=e0uvAvEN1W^{*W?zT1i#fxuw10%~))J
zjx#gxoVlXREWZf4hRkgdHx5V_S*;p-y%JtGgQ4}lnA~MBz-AFdxUxU1RIT$`sal|X
zPB6sEVRjGbXIP0U+?rT|y5+ev&OMX*5C$n2SBPZr`jqzrmpVrNciR0e*Wm?fK6DY&
zl(XQZ60yWXV-|Ps!A{EF;=_z(YAF=T(-MkJXUoX
zI{UMQDAV2}Ya?EisdEW;@pE6dt;j0fg5oT2dxCi{wqWJ<)|SR6fxX~5CzblPGr8cb
zUBVJ2CQd~3L?7yfTpLNbt)He1D>*KXI^GK%<`bq^cUq$Q@uJifG>p3LU(!H=C)aEL
zenk7pVg}0{dKU}&l)Y2Y2eFMdS(JS0}oZUuVaf2+K*YFNGHB`^YGcIpnBlMhO7d4@vV
zv(@N}(k#REdul8~fP+^F@ky*wt@~&|(&&meNO>rKDEnB{ykAZ}k>e@lad7to>Ao$B
zz<1(L=#J*u4_LB=8w+*{KFK^u00NAmeNN7pr+Pf+N*Zl^dO{LM-hMHyP6N!~`24jd
zXYP|Ze;dRXKdF2iJG$U{k=S86l@pytLx}$JFFs8e)*Vi?aVBtGJ3JZUj!~c{(rw5>vuRF$`^p!P8w1B=O!skwkO5yd4_XuG^QVF
z`-r5K7(IPSiKQ2|U9+`@Js!g6sfJwAHVd|s?|mnC*q
zp|B|z)(8+mxXyxQ{8Pg3F4|tdpgZZSoU4P&9I8)nHo1@)9_9u&NcT^FI)6|hsAZFk
zZ+arl&@*>RXBf-OZxhZerOr&dN5LW9@gV=oGFbK*J+m#R-|e6(Loz(;g@T^*oO)0R
zN`N=X46b{7yk5FZGr#5&n1!-@j@g02g|X>MOpF3#IjZ_4wg{dX+G9eqS+Es9@6nC7
zD9$NuVJI}6ZlwtUm5cCAiYv0(Yi{%eH+}t)!E^>^KxB5^L~a`4%1~5q6h>d;paC9c
zTj0wTCKrhWf+F#5>EgX`sl%POl?oyCq0(w0xoL?L%)|Q7d|Hl92rUYAU#lc**I&^6p=4lNQPa0
znQ|A~i0ip@`B=FW-Q;zh?-wF;Wl5!+q3GXDu-x&}$gUO)NoO7^$BeEIrd~1Dh{Tr`
z8s<(Bn@gZ(mkIGnmYh_ehXnq78QL$pNDi)|QcT*|GtS%nz1uKE+E{7jdEBp%h0}%r
zD2|KmYGiPa4;md-t_m5YDz#c*oV_FqXd85d@eub?9N61QuYcb3CnVWpM(D-^|CmkL
z(F}L&N7qhL2PCq)fRh}XO@U`Yn<?TNGR4L(mF7#4u29{i~@k;pLsgl({YW5`Mo+p=zZn3L*4{JU;++dG9
X@eDJUQo;Ye2mwlRs?y0|+_a0zY+Zo%Dkae}+MySoIppb75o?vUW_?)>@g{U2`ERQIXV
zeY$JrWnMZ$QC<=ii4X|@0H8`si75jB(ElJb00HAB%>SlLR{!zO|C9P3zxw_U8?1d8uRZ=({Ga4shyN}3
zAK}WA(ds|``G4jA)9}Bt2Hy0+f3rV1E6b|@?hpGA=PI&r8)ah|)I2s(P5Ic*Ndhn^
z*T&j@gbCTv7+8rpYbR^Ty}1AY)YH;p!m948r#%7x^Z@_-w{pDl|1S4`EM3n_PaXvK
z1JF)E3qy$qTj5Xs{jU9k=y%SQ0>8E$;x?p9ayU0bZZeo{5Z@&FKX>}s!0+^>C^D#z
z>xsCPvxD3Z=dP}TTOSJhNTPyVt14VCQ9MQFN`rn!c&_p?&4<5_PGm4a;WS&1(!qKE
z_H$;dDdiPQ!F_gsN`2>`X}$I=B;={R8%L~`>RyKcS$72ai$!2>d(YkciA^J0@X%G4
z4cu!%Ps~2JuJ8ex`&;Fa0NQOq_nDZ&X;^A=oc1&f#3P1(!5il>6?uK4QpEG8z0Rhu
zvBJ+A9RV?z%v?!$=(vcH?*;vRs*+PPbOQ3cdPr5=tOcLqmfx@#hOqX0iN)wTTO21jH<>jpmwRIAGw7`a|sl?9y9zRBh>(_%|
zF?h|P7}~RKj?HR+q|4U`CjRmV-$mLW>MScKnNXiv{vD3&2@*u)-6P@h0A`eeZ7}71
zK(w%@R<4lLt`O7fs1E)$5iGb~fPfJ?WxhY7c3Q>T-w#wT&zW522pH-B%r5v#5y^CF
zcC30Se|`D2mY$hAlIULL%-PNXgbbpRHgn<&X3N9W!@BUk@9g*P5mz-YnZBb*-$zMM
z7Qq}ic0mR8n{^L|=+diODdV}Q!gwr?y+2m=3HWwMq4z)DqYVg0J~^}-%7rMR@S1;9
z7GFj6K}i32X;3*$SmzB&HW{PJ55kT+EI#SsZf}bD7nW^Haf}_gXciYKX{QBxIPSx2Ma?
zHQqgzZq!_{&zg{yxqv3xq8YV+`S}F6A>Gtl39_m;K4dA{pP$BW0oIXJ>jEQ!2V3A2
zdpoTxG&V=(?^q?ZTj2ZUpDUdMb)T?E$}CI>r@}PFPWD9@*%V6;4Ag>D#h>!s)=$0R
zRXvdkZ%|c}ubej`jl?cS$onl9Tw52rBKT)kgyw~Xy%z62Lr%V6Y=f?2)J|bZJ5(Wx
zmji`O;_B+*X@qe-#~`HFP<{8$w@z4@&`q^Q-Zk8JG3>WalhnW1cvnoVw>*R@c&|o8
zZ%w!{Z+MHeZ*OE4v*otkZqz11*s!#s^Gq>+o`8Z5
z^i-qzJLJh9!W-;SmFkR8HEZJWiXk$40i6)7
zZpr=k2lp}SasbM*Nbn3j$sn0;rUI;%EDbi7T1ZI4qL6PNNM2Y%6{LMIKW+FY_yF3)
zSKQ2QSujzNMSL2r&bYs`|i2Dnn
z=>}c0>a}>|uT!IiMOA~pVT~R@bGlm}Edf}Kq0?*Af6#mW9f9!}RjW7om0c9Qlp;yK
z)=XQs(|6GCadQbWIhYF=rf{Y)sj%^Id-ARO0=O^Ad;Ph+
z0?$eE1xhH?{T$QI>0JP75`r)U_$#%K1^BQ8z#uciKf(C701&RyLQWBUp*Q7eyn76}
z6JHpC9}R$J#(R0cDCkXoFSp;j6{x{b&0yE@P7{;pCEpKjS(+1RQy38`=&Yxo%F=3y
zCPeefABp34U-s?WmU#JJw23dcC{sPPFc2#J$ZgEN%zod}J~8dLm*fx9f6SpO
zn^Ww3bt9-r0XaT2a@Wpw;C23XM}7_14#%QpubrIw5aZtP+CqIFmsG4`Cm6rfxl9n5
z7=r2C-+lM2AB9X0T_`?EW&Byv&K?HS4QLoylJ|OAF
z`8atBNTzJ&AQ!>sOo$?^0xj~D(;kS$`9zbEGd>f6r`NC3X`tX)sWgWUUOQ7w=$TO&*j;=u%25ay-%>3@81tGe^_z*C7pb9y*Ed^H3t$BIKH2o+olp#$q;)_
zfpjCb_^VFg5fU~K)nf*d*r@BCC>UZ!0&b?AGk_jTPXaSnCuW110wjHPPe^9R^;jo3
zwvzTl)C`Zl5}O2}3lec=hZ*$JnkW#7enKKc)(pM${_$9Hc=Sr_A9Biwe*Y=T?~1CK
z6eZ9uPICjy-sMGbZl$yQmpB&`ouS8v{58__t0$JP%i3R&%QR3ianbZqDs<2#5FdN@n5bCn^ZtH992~5k(eA|8|@G9u`wdn7bnpg|@{m
z^d6Y`*$Zf2Xr&|g%sai#5}Syvv(>Jnx&EM7-|Jr7!M~zdAyjt*xl;OLhvW-a%H1m0
z*x5*nb=R5u><7lyVpNAR?q@1U59
zO+)QWwL8t
zyip?u_nI+K$uh{y)~}qj?(w0&=SE^8`_WMM
zTybjG=999h38Yes7}-4*LJ7H)UE8{mE(6;8voE+TYY%33A>S6`G_95^5QHNTo_;Ao
ztIQIZ_}49%{8|=O;isBZ?=7kfdF8_@azfoTd+hEJKWE!)$)N%HIe2cplaK`ry#=pV
z0q{9w-`i0h@!R8K3GC{ivt{70IWG`EP|(1g7i_Q<>aEAT{5(yD
z=!O?kq61VegV+st@XCw475j6vS)_z@efuqQgHQR1T4;|-#OLZNQJPV4k$AX1Uk8Lm
z{N*b*ia=I+MB}kWpupJ~>!C@xEN#Wa7V+7{m4j8c?)ChV=D?o~sjT?0C_AQ7B-vxqX30s0I_`2$in86#`mAsT-w?j{&AL@B3$;P
z31G4(lV|b}uSDCIrjk+M1R!X7s4Aabn<)zpgT}#gE|mIvV38^ODy@<&yflpCwS#fRf9ZX3lPV_?8@C5)A;T
zqmouFLFk;qIs4rA=hh=GL~sCFsXHsqO6_y~*AFt939UYVBSx1s(=Kb&5;j7cSowdE;7()CC2|-i9Zz+_BIw8#ll~-tyH?F3{%`QCsYa*b#s*9iCc`1P1oC26?`g<9))EJ3%xz+O!B3
zZ7$j~To)C@PquR>a1+Dh>-a%IvH_Y7^ys|4o?E%3`I&ADXfC8++hAdZfzIT#%C+Jz
z1lU~K_vAm0m8Qk}K$F>|>RPK%<1SI0(G+8q~H
zAsjezyP+u!Se4q3GW)`h`NPSRlMoBjCzNPesWJwVTY!o@G8=(6I%4XHGaSiS3MEBK
zhgGFv6Jc>L$4jVE!I?TQuwvz_%CyO!bLh94nqK11C2W$*aa2ueGopG8DnBICVUORP
zgytv#)49fVXDaR$SukloYC3u7#5H)}1K21=?DKj^U)8G;MS)&Op)g^zR2($<>C*zW
z;X7`hLxiIO#J`ANdyAOJle4V%ppa*(+0i3w;8i*BA_;u8gOO6)MY`ueq7stBMJTB;
z-a0R>hT*}>z|Gg}@^zDL1MrH+2hsR8
zHc}*9IvuQC^Ju)^#Y{fOr(96rQNPNhxc;mH@W*m206>Lo<*SaaH?~8zg&f&%YiOEG
zGiz?*CP>Bci}!WiS=zj#K5I}>DtpregpP_tfZtPa(N<%vo^#WCQ5BTv0vr%Z{)0q+
z)RbfHktUm|lg&U3YM%lMUM(fu}i#kjX9h>GYctkx9Mt_8{@s%!K_EI
zScgwy6%_fR?CGJQtmgNAj^h9B#zmaMDWgH55pGuY1Gv7D
z;8Psm(vEPiwn#MgJYu4Ty9D|h!?Rj0ddE|&L3S{IP%H4^N!m`60ZwZw^;eg4sk6K{
ziA^`Sbl_4~f&Oo%n;8Ye(tiAdlZKI!Z=|j$5hS|D$bDJ}p{gh$KN&JZYLUjv4h{NY
zBJ>X9z!xfDGY
z+oh_Z&_e#Q(-}>ssZfm=j$D&4W4FNy&-kAO1~#3Im;F)Nwe{(*75(p=P^VI?X0GFakfh+X-px4a%Uw@fSbmp9hM1_~R>?Z8+
ziy|e9>8V*`OP}4x5JjdWp}7eX;lVxp5qS}0YZek;SNmm7tEeSF*-dI)6U-A%m6YvCgM(}_=k#a6o^%-K4{`B1+}O4x
zztDT%hVb;v#?j`lTvlFQ3aV#zkX=7;YFLS$uIzb0E3lozs5`Xy
zi~vF+%{z9uLjKvKPhP%x5f~7-Gj+%5N`%^=yk*Qn{`>
z;xj&ROY6g`iy2a@{O)V(jk&8#hHACVDXey5a+KDod_Z&}kHM}xt7}Md@pil{2x7E~
zL$k^d2@Ec2XskjrN+IILw;#7((abu;OJii&v3?60x>d_Ma(onIPtcVnX@ELF0aL?T
zSmWiL3(dOFkt!x=1O!_0n(cAzZW+3nHJ{2S>tgSK?~cFha^y(l@-Mr2W$%MN{#af8J;V*>hdq!gx=d0h$T7l}>91Wh07)9CTX
zh2_ZdQCyFOQ)l(}gft0UZ